有人解释一些代码吗?

时间:2012-12-12 08:47:17

标签: ios

我在iOS开发人员的一些代码中看到了。它有以下代码:

void (^block)(NSUInteger buttonIndex, UIAlertView *alertView) = objc_getAssociatedObject(self, "blockCallback");

但是。我不明白为什么将对象self分配给块代码。该方法的完整代码是:

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    void (^block)(NSUInteger buttonIndex, UIAlertView *alertView) = objc_getAssociatedObject(self, "blockCallback"); 
    if (block) { 
        block(buttonIndex, self); 
    } 
}

1 个答案:

答案 0 :(得分:1)

正在使用一个类别向UIAlertView添加基于块的功能。这意味着您不必为警报视图实现委托方法,您可以在创建时为其提供块。

但是,类别不允许您将实例变量添加到对象。在这种情况下,需要存储块,以便稍后当用户点击警报视图上的按钮时可以执行它们。

为了解决这个问题,程序员使用了相关对象,允许您在编写类别代码时添加伪ivars。搜索objective-c关联对象以获取更多信息。