BlockButton *button = [[BlockButton alloc] initWithFrame:CGRectMake(10, 10, 100, 40)];
[button setTitle:@"touch me" forState:UIControlStateNormal];
button.backgroundColor = [UIColor orangeColor];
[self.view addSubview:button];
[button release];
// NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:@"jack", nil]; //1
// NSLog(@"1.block訪問前 array.retainCount=%d",array.retainCount);
// //創建block塊,傳個button,當button被按下時則調用此block
// /*
// 當此block被copy後,如果block訪問了局部對象
// 則會將block中引用的局部對象都retain一下,防止此對象被銷燬掉
// */
// [button addTouchBlock:^(BlockButton *button) {
// NSLog(@"array=%@",array);
// NSLog(@"2.block訪問後 array.retainCount=%d",array.retainCount);
// }];
// [array release];
/*
當此block被copy後,如果block訪問了當前對象的實例變量或方法,則會對當前對象retain
*/
__block DetialViewController *this = self;
NSLog(@"1.block訪問前,self.retainCount=%d",self.retainCount);
[button addTouchBlock:^(BlockButton *button) {
NSLog(@"%@",this->_data);
NSLog(@"2.block訪問後%d",this.retainCount);
}];
// [button addTarget:self action:@selector(buttonAction) forControlEvents:UIControlEventTouchUpInside];
// [UIView beginAnimations:nil context:nil];
// [UIView setAnimationDuration:0.4];
//
//// button.frame = CGRectMake
// [UIView commitAnimations];
[UIView animateWithDuration:0.4 animations:^{
// button.frame = CGRectMake(<#CGFloat x#>, <#CGFloat y#>, <#CGFloat width#>, <#CGFloat height#>);
}];
}
//- (void)buttonAction {
// NSLog(@"2.block訪問後,%d",self.retainCount);
//}
iOS 關於Block的使用及循環引用
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.