我对内存管理/保留周期有点困惑。这是一个简单的类:
@interface Test : NSObject {
NSObject *objectA;
}
@property (nonatomic, strong) NSObject *objectB;
- (void)methodA;
@end
假设我有一个 Test 实例拥有的块。在这个块中,我做:
objectA = nil;
我得到一个编译器,说它正在这个块中捕获自我,这将导致保留周期。为什么?我在这里看不到自己。
然后,如果我这样做:
self.objectB = nil;
没有警告!如果有的话,我应该在这里收到警告。
另外,如果我这样做:
[self methodA];
我在这里得到一个警告。所以我不确定幕后到底发生了什么。我希望第一个不给我警告,最后两个给我一个警告(因为我保持对自我的强指针),但实际上恰恰相反。
这是一个例子:
@interface ListVC () {
NSObject *objectA;
}
@property (nonatomic, strong) NSObject *objectB;
- (void)methodA;
@end
在 viewDidLoad 中:
- (void)viewDidLoad {
[super viewDidLoad];
[self.tableView addPullToRefreshWithActionHandler:^{
self.objectB = nil; //no warning here
objectA = nil; //warning here
[self methodA]; //warning here (if i place this above previous warning
}];
}