我明白为什么我们会在一个块中使用weakSelf,只是没有那么多。
我正在将代码库转换为 ARC,它会给出很多带有块的保留周期警告。从我收集的文档中,我需要更改它:
[self.selectedAsset addToFavoritesWithCompletion:^(NSError *error) {
self.selectedAsset.isFavorite = YES;
[self updateIsFavoriteButton];
}];
对此:
__weak MyViewController* weakSelf = self;
[self.selectedAsset addToFavoritesWithCompletion:^(NSError *error) {
self.selectedAsset.isFavorite = YES;
[weakSelf updateIsFavoriteButton];
}];
使编译器满意并避免保留循环。我的问题是为什么不需要更改线路:
self.selectedAsset.isFavorite = YES;
使用弱自我?它不也评估为方法调用吗?为什么编译器不警告这种格式的行?
[[self selectedAsset]setIsFavorite:YES];
编辑:我刚刚更新到 XCode 4.6,现在它会针对这种情况生成编译器警告。有趣的时机:)