这用于Objective-C的弱化模式
我的猜测是这意味着:使用名称“weakSelf”和 self 类型(例如 MyViewController)为 self 分配一个弱引用
如果它是正确的并且对您来说很明显:我想绝对确保它是正确的。谢谢。
这用于Objective-C的弱化模式
我的猜测是这意味着:使用名称“weakSelf”和 self 类型(例如 MyViewController)为 self 分配一个弱引用
如果它是正确的并且对您来说很明显:我想绝对确保它是正确的。谢谢。
我的猜测是这意味着:使用名称
weakSelf
和typeof
自我(例如MyViewController
)为 self 分配一个弱引用
是的,这几乎就是它的意思。的类型self
将是MyViewController*
(带有星号) not MyViewController
。
使用这种语法而不是简单地编写背后的想法
MyViewController __weak *weakSelf = self;
使重构代码变得更容易。的使用typeof
还可以定义可以粘贴到代码中任何位置的代码片段。
使用@weakify
和@strongify
来自libExtObjC有助于简化有时必须围绕块做的“弱强舞蹈”。OP 引用了这篇文章。
例子!
__weak __typeof(self) weakSelf = self;
__weak __typeof(delegate) weakDelegate = delegate;
__weak __typeof(field) weakField = field;
__weak __typeof(viewController) weakViewController = viewController;
[viewController respondToSelector:@selector(buttonPressed:) usingBlock:^(id receiver){
__strong __typeof(weakSelf) strongSelf = weakSelf;
__strong __typeof(weakDelegate) strongDelegate = weakDelegate;
__strong __typeof(weakField) strongField = weakField;
__strong __typeof(weakViewController) strongViewController = weakViewController;
相对...
@weakify(self, delegate, field, viewController);
[viewController respondToSelector:@selector(buttonPressed:) usingBlock:^(id receiver){
@strongify(self, delegate, field, viewController);
你的解释是正确的。但是,我发现以这种方式编写时,阅读起来会有些混乱。我更喜欢它后面有一个额外的空间typeof(self)
:
__weak typeof(self) weakSelf = self;
根据您的编译器设置,您可能会收到警告“Expected ';' 表达后”。您可以通过将其更改为使用 __typeof 来解决此问题,如下所示:__typeof(self) __weak weakSelf = self;
感谢 Leo Natan 和这个问题:https ://stackoverflow.com/a/32145709/1758224 。