相关疑难解决方法(0)

使用块保留`self`循环

我担心这个问题非常基本,但我认为这与很多进入数据块的Objective-C程序员有关.

我听到的是,由于块捕获作为const副本在其中引用的局部变量self,因此如果要复制该块,则在块内使用可能会导致保留周期.因此,我们应该使用__block强制块直接处理self而不是复制它.

__block typeof(self) bself = self;
[someObject messageWithBlock:^{ [bself doSomething]; }];
Run Code Online (Sandbox Code Playgroud)

而不仅仅是

[someObject messageWithBlock:^{ [self doSomething]; }];
Run Code Online (Sandbox Code Playgroud)

我想知道的是:如果这是真的,有没有办法可以避免丑陋(除了使用GC)?

memory-management objective-c objective-c-blocks

166
推荐指数
5
解决办法
6万
查看次数

Objective C阻止作为异步回调和坏访问

我有一个严重的疑问.假设以下场景:

  1. 你有一个UIViewController屏幕.
  2. 例如,应用程序使用块作为回调启动后端调用
  3. 您使用"自我"代理,以防止保留周期.
  4. 用户点击"返回",然后UIViewController获取dealloc'ed.
  5. 迟早,回调块会被执行>> BAD ACCESS

iOS 4的之前,我们通过设置来处理这种情况nildelegate的...财产我不知道,什么类,你都用上了.

但是现在......你怎么取消一个块?如果将块发送到静态方法,并且您无法消除该回调引用,该怎么办?

在这种情况下,我们应该避免使用"自我"代理吗?

顺便说一下,"自我"代理,我的意思是说:

__block typeof(self) bself = self;
Run Code Online (Sandbox Code Playgroud)

谢谢!!

objective-c ios objective-c-blocks

9
推荐指数
1
解决办法
3357
查看次数