__weak typeof(self)weakSelf = self OR __weak MyObject * weakSelf = self?

时间:2016-04-01 19:55:18

标签: objective-c multithreading grand-central-dispatch

这里最好使用什么以及为什么?

__weak typeof(self) weakSelf = self;

__weak MyObject *weakSelf = self;

显然,__weak id weakSelf = self;是最不可取的,因为我们不会进行类型检查,这是正确的吗?

然而,在前两个之间...这是可取的,为什么?

另外,有什么理由使用__typeof而不是typeof,如果clang支持使用typeof?

3 个答案:

答案 0 :(得分:3)

我最近开始这样写:

__typeof(self) __weak weakSelf = self;

使用__typeof版本可以使用代码段,因此速度更快,并且在整个代码中也保持一致。

这不是常见的形式,因为大多数人将__weak变量限定符放在开头,但是根据这里的文档:https://developer.apple.com/library/mac/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html变量限定符在类型之后。

进入街区后,我使用:

__typeof(weakSelf) __strong strongSelf = weakSelf;
if (!strongSelf) return;

再次获得强有力的参考。

这两个都是代码片段,所以我实际上并没有做太多的打字,或者必须记住确切的语法。

答案 1 :(得分:1)

第一个更方便,因为无论是什么类,代码都是相同的。您可以使用Xcode代码段插入typeof - 使用更少的键击代码行。如果更改班级名称,也可以减少工作量。

我不知道使用typeof版本有什么缺点,除非它有点难以理解。

If you use __typeof__ instead of typeof, your code will compile regardless of the compiler's dialect setting.

答案 2 :(得分:-3)

你可能知道__typeof__()"扩展"到论证的具体类型。如果参数为selfself的具体类型为MyObject(这是您的情况),则它完全相同。

所以第一种形式只有另一种间接性,具有间接性的通常优点和缺点:

  • 间接形式更灵活,因为间接跟随变化。

  • 间接形式的可读性较差,因为读者必须理解他心中的间接性。

我个人更喜欢第二种形式。但更重要的是:我个人更愿意浪费时间来处理更重要的问题。 ; - )

你会写:

__typeof__(self) copy = [self copy];

我不会。