设置帧时weakSelf

时间:2014-02-06 13:17:52

标签: ios objective-c block

我最近阅读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;
});

2 个答案:

答案 0 :(得分:2)

这不是块。它是GCC C扩展,它会导致代码块  如果括在括号和括号内,则返回一个值。

  

这不仅将配置细节分为初始化,   但附加范围允许通用变量名称,如框架,   按钮,以及在后续初始化中重复使用的视图。不再   loginButtonFrame = ... / signupButtonFrame = ...!

来源:http://nshipster.com/new-years-2014/

答案 1 :(得分:1)

这不是一个块,阻止以^开头。 我相信这段代码:

({
    CGRect frame = avatar.frame;
    frame.origin.y = CGRectGetMaxY(self.view);
    frame;
});

是一种创建CGRect的方法。