我在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);
}
}
答案 0 :(得分:1)
正在使用一个类别向UIAlertView添加基于块的功能。这意味着您不必为警报视图实现委托方法,您可以在创建时为其提供块。
但是,类别不允许您将实例变量添加到对象。在这种情况下,需要存储块,以便稍后当用户点击警报视图上的按钮时可以执行它们。
为了解决这个问题,程序员使用了相关对象,允许您在编写类别代码时添加伪ivars。搜索objective-c关联对象以获取更多信息。