ブロックで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 に更新したところ、この状況でコンパイラの警告が生成されるようになりました。面白いタイミング:)