objective-c - 在传递给构造函数的 block 中引用 self

标签 objective-c objective-c-blocks variable-initialization

我有一个 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/

相关文章:

iphone - 如何让我的 UIPickerView 在选定值之后显示标签?

objective-c - 如何在 GCD block 中指定返回类型

java - 变量可能尚未初始化

java - 为什么java编译器不识别字段已初始化?

ios - XCode IBAction 和 IBOutlets 错误

objective-c - NSImage - 无法从文件加载图像

ios - 在 iOS 中缓存异步响应

c - 为什么 C 允许未初始化的局部变量?

ios - 从 iOS 应用程序在 Tumblr 上分享链接

iphone - iOS - 将 block 传递给函数