这里最好使用什么以及为什么?
__weak typeof(self) weakSelf = self;
或
__weak MyObject *weakSelf = self;
显然,__weak id weakSelf = self;
是最不可取的,因为我们不会进行类型检查,这是正确的吗?
然而,在前两个之间...这是可取的,为什么?
另外,有什么理由使用__typeof而不是typeof,如果clang支持使用typeof?
答案 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
版本有什么缺点,除非它有点难以理解。
答案 2 :(得分:-3)
你可能知道__typeof__()
"扩展"到论证的具体类型。如果参数为self
且self
的具体类型为MyObject
(这是您的情况),则它完全相同。
所以第一种形式只有另一种间接性,具有间接性的通常优点和缺点:
间接形式更灵活,因为间接跟随变化。
间接形式的可读性较差,因为读者必须理解他心中的间接性。
我个人更喜欢第二种形式。但更重要的是:我个人更愿意浪费时间来处理更重要的问题。 ; - )
你会写:
__typeof__(self) copy = [self copy];
我不会。