ブロックをコンストラクターに渡す目的の C オブジェクトがあります。完全にロードされたときにビューコントローラーでそのブロックを起動したいのは特別なケースです。ただし、そのブロックでは、ブロックを渡すオブジェクトも参照したいと考えています。次の例を検討してください。
typedef void (^MyBlock)();
//constructor of my object
-(id)initMyObjectWithBlock:(MyBlock)block{
self = [super init];
if(self){
myivar = block; //to be used later
}
}
//somewhere else in my app
MyObject *obj = [[MyObject alloc] initMyObjectWithBlock:^{
[obj doSomething];
}];
その[obj doSomething]
行で、「ブロックによってキャプチャされたときに変数が初期化されていません」という警告が表示されますが、これは理にかなっています。そのブロックでは、「親」オブジェクト (obj
この場合) への参照が必要です。これを達成する方法はありますか?私は特定の問題の回避策とパターンを知っていますが、そのような参照が可能かどうか知りたいと思っていました.