我有一个 Objective-C 对象,我将一个 Block 传递给它的构造函数。这是一种特殊情况,我想在 View Controller 完全加载时触发该 block 。但是,在该 block 中,我还想引用我将 block 传递到其中的对象。考虑这个例子:
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]
行,我收到“变量在被 block 捕获时未初始化”警告,这是有道理的。在该 block 中,我需要对“父”对象的引用(在本例中为 obj
)。有什么办法可以实现这一点吗?我确实知道解决我的具体问题的方法和模式,但我想知道这样的引用是否可能。
最佳答案
typedef void (^MyBlock)(MyObject*);
//constructor of my object
-(id)initMyObjectWithBlock:(MyBlock)block{
self = [super init];
if(self){
myivar = block;
}
}
//somewhere else in app
MyObject *obj = [[MyObject alloc] initMyObjectWithBlock:^(MyObject* myObj){
[myObj doSomething];
}];
//and somewhere else in app
obj.myivar(obj);
关于objective-c - 在传递给构造函数的 block 中引用 self,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22276504/