-2

我看到了来自 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); 
    } 
}
4

1 回答 1

1

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

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

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

于 2012-12-12T09:27:00.910 回答