我是 ios 块编程的新手,我读过很多指南,他们说,东西被保留在一个块中,我写了一个演示来测试他们提到的保留周期。
头文件:
typedef NSString* (^MyBlock)(void);
@interface DetailViewController : UIViewController <UISplitViewControllerDelegate>
{
UIView * testView;
SubDetailViewController * tSubDetailViewController;
NSMutableArray * array;
MyBlock block1;
}
m 文件:在viewDidLoad
:
array = [[NSMutableArray alloc] init];
block1 = ^(void){
[array addObject:@"23"];
[self btn2Touch:nil];
return @"3";
};
NSLog(@"self after block retainCount -> %d",self.retainCount);
NSLog(@"array after block retainCount -> %d",array.retainCount);
//self.block1();
[array release];
我以为数组和self会被保留,retatinCount +1;但是无论我是否执行 self.block1(),retainCount 不 +1,一切似乎都很好,数组可以释放,当弹出视图控制器时,自动释放正常。
我想念导游的东西吗?很好奇这种情况。任何人都可以给我一个带有块的保留循环代码吗?