【发布时间】:2014-02-06 13:17:51
【问题描述】:
我最近阅读了this post,并认为使用文章中的提示是个好主意。我在块中使用它,但我也应该在下面的“块”中使用它。下面的“块”是真正的块吗?
avatar.frame = ({
CGRect frame = avatar.frame;
frame.origin.y = CGRectGetMaxY(self.view);
frame;
});
那会变成:
__weak typeof(self)weakSelf = self;
avatar.frame = ({
__strong typeof(weakSelf)strongSelf = weakSelf;
CGRect frame = avatar.frame;
frame.origin.y = CGRectGetMaxY(strongSelf.view);
frame;
});
【问题讨论】:
-
不,它不是真正的 objc 块。这是编译器扩展允许的。你不必虚弱地自我。
-
@MaciejOczko 谢谢,但我必须定期进行,对吧?
-
@yoeriboven:这实际上取决于块的使用方式。块是同步执行还是异步执行?它是否存储在某个集合中以供以后执行?您是否想要保持对自我的强烈引用?没有“一刀切”的答案。
标签: ios objective-c block