究竟是什么'__weak typeof(self)weakSelf = self;'意思

时间:2014-05-19 16:18:26

标签: objective-c typeof weak

这用于Objective-C的weakify pattern

我的猜测是,这意味着:为自己指定一个弱引用,其名称为“weakSelf'和自我类型(例如MyViewController)

如果它是正确的并且看起来很明显:我想绝对确保做到这一点。感谢。

4 个答案:

答案 0 :(得分:26)

  

我的猜测是,这意味着:为自己指定名为weakSelftypeof自我的弱引用(例如MyViewController

是的,这几乎就是它的含义。 self的类型为MyViewController*(带星号)而非MyViewController

使用此语法而不是简单地编写

的想法
MyViewController __weak *weakSelf = self;

使重构代码变得更容易。使用typeof还可以定义可以粘贴到代码中任何位置的代码段。

答案 1 :(得分:6)

使用libExtObjC中的@weakify@strongify有助于简化弱势舞蹈"一个人有时必须在街区附近做。 OP引用了此article

实施例<!/ em>的

__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);

答案 2 :(得分:5)

您的解释是正确的。但是,我发现当它以这种方式编写时,读起来有点令人困惑。我更喜欢typeof(self)之后的额外空格:

__weak typeof(self) weakSelf = self;

答案 3 :(得分:4)

根据您的编译器设置,您可能会收到警告&#34;预期&#39 ;;&#39;表达后#34;。您可以通过将其更改为使用__typeof来解决此问题:if($_SERVER['REMOTE_ADDR']!="YOUR IP ADDRESS") { //exit or die }

感谢Leo Natan和这个问题:https://stackoverflow.com/a/32145709/1758224