1
私はReactiveCocoaとlibextobjcでこの種の使い方を見つけました。ブロックは、それが自己という名前のローカル変数を作成し、グローバル変数を置き換えます実行された場合には@strongifyと@weakifyはiOSで本当に安全ですか?
@try {} @finally {} __attribute__((objc_ownership(strong))) __typeof__(self) self = self_weak_;
:私は@strongifyがコンパイルされたとき、それは変更になっていることを知っています。
@interface A: NSObject
@property (nonatomic,copy) TestBlock testBlock;
@end
@implementation A
- (void) someAPI{
@weakify(self)
self.testBlock = ^{
@strongify(self)//the global variable of self was captured by this block before this line was executed.
if (self != nil)
{
[self doSomethingAwesome];
[self doSomethingAwesomeAgain];
}
};
}
@end
私の質問: 1.ブロックが実行される前に、ローカル変数が生成されましたです。 2.ブロックがコピーされ、呼び出されたことがない場合は、円を保持しますか?
私の貧しい私の英語のために申し訳ありません!