这用于Objective-C 的weakify模式
我的猜测是,这意味着:为self分配一个弱引用,名称为"weakSelf",类型为self(例如MyViewController(
如果它是正确的,并且对你来说很明显:我想绝对确保这是正确的。谢谢
我的猜测是,这意味着:为名称为
weakSelf
的self和typeof
-self(例如MyViewController
(分配一个弱引用
是的,这几乎就是它的意思。self
的类型将是MyViewController*
(带星号(而不是MyViewController
。
使用这种语法而不是简单地编写背后的想法
MyViewController __weak *weakSelf = self;
使重构代码变得更容易。typeof
的使用还可以定义可以粘贴到代码中任何位置的代码片段。
使用libExtObjC中的@weakify
和@strongify
有助于简化;弱肉强食的舞蹈;一个人有时不得不绕过街区。
示例
__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;
根据编译器设置,您可能会收到一条警告"表达式后应为';'"。您可以通过将其更改为使用__typeof来修复此问题,如下所示:__typeof(self) __weak weakSelf = self;
感谢Leo Natan和这个问题:https://stackoverflow.com/a/32145709/1758224.