【发布时间】:2011-10-16 15:55:29
【问题描述】:
我有一个严重的疑问。假设如下场景:
- 您的屏幕上有一个
UIViewController。 - 应用程序使用块作为回调启动后端调用
- 您使用“自我”代理来防止保留循环。
- 用户点击“返回”,
UIViewController被解除锁定。 - 迟早会执行回调块 >>
BAD ACCESS
在 iOS 4 之前,我们通过将...的 delegate 属性设置为 nil 来处理这种情况。我不知道,无论您使用的是什么类。
但是现在......你如何取消一个块??如果块被发送到静态方法,而您无法清除该回调引用怎么办??。
在这种情况下,我们是否应该避免使用“self”代理项?
顺便说一句,“自我”代理,我的意思是:
__block typeof(self) bself = self;
谢谢!!
【问题讨论】:
-
一旦视图被解除分配,如何将静态块变量设置为 NULL?
-
你的意思是,拥有一个静态的 __block 变量(或一个类成员),然后将其清除?
-
我希望找到某种 API 来命名和杀死一个块。但我没有意识到我可以只拥有一个 __block 作为班级成员。这太简单了......谢谢亚历克斯!
-
@AlexNichol,您能详细说明一下将此块变量设置为 NULL 吗? __block 变量在哪里声明以及如何声明?谢谢
-
@bandejapaisa 的想法是维护一个静态块变量,并在对象被解除分配后将其设置为 NIL。
标签: objective-c ios objective-c-blocks