"__weak类型(自我)弱自我=自我"到底是什么意思?



这用于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.

最新更新