__weak typeof(self) weakSelf = self 或 __weak MyObject *weakSelf = self?
__weak typeof(self) weakSelf = self OR __weak MyObject *weakSelf = self?
这里最好使用什么?为什么?
__weak typeof(self) weakSelf = self;
或
__weak MyObject *weakSelf = self;
显然,__weak id weakSelf = self;
是最不可取的,因为我们不会进行类型检查,对吗?
但是,在前两个之间...哪个是可取的,为什么?
此外,如果 clang 支持使用 typeof,是否有理由使用 __typeof 而不是 typeof?
第一种比较方便,因为不管class,代码都是一样的。您可以使用 Xcode 代码片段插入 typeof
-using 代码行,减少击键次数。如果更改 class.
的名称,您的工作量也会减少
我不知道使用 typeof
版本有什么缺点,只是它可能更难理解。
If you use __typeof__
instead of typeof
, your code will compile regardless of the compiler's dialect setting.
您可能知道 __typeof__()
"expands" 参数的具体类型。如果参数是 self
并且 self
的具体类型是 MyObject
(这是你的情况),它是完全一样的。
所以第一种形式只是另一种间接寻址,具有间接寻址的通常优点和缺点:
间接形式更灵活,因为间接随变化
间接形式可读性较差,因为reader必须在脑海中理解间接。
我个人更喜欢第二种形式。但更重要的是:就我个人而言,我更愿意将时间浪费在更重要的问题上。 ;-)
你会写:
__typeof__(self) copy = [self copy];
我不会。
我最近开始这样写:
__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;
再次获得强引用
这两个都是代码片段,所以我实际上并没有打太多字,也不必记住确切的语法。
这里最好使用什么?为什么?
__weak typeof(self) weakSelf = self;
或
__weak MyObject *weakSelf = self;
显然,__weak id weakSelf = self;
是最不可取的,因为我们不会进行类型检查,对吗?
但是,在前两个之间...哪个是可取的,为什么?
此外,如果 clang 支持使用 typeof,是否有理由使用 __typeof 而不是 typeof?
第一种比较方便,因为不管class,代码都是一样的。您可以使用 Xcode 代码片段插入 typeof
-using 代码行,减少击键次数。如果更改 class.
我不知道使用 typeof
版本有什么缺点,只是它可能更难理解。
If you use __typeof__
instead of typeof
, your code will compile regardless of the compiler's dialect setting.
您可能知道 __typeof__()
"expands" 参数的具体类型。如果参数是 self
并且 self
的具体类型是 MyObject
(这是你的情况),它是完全一样的。
所以第一种形式只是另一种间接寻址,具有间接寻址的通常优点和缺点:
间接形式更灵活,因为间接随变化
间接形式可读性较差,因为reader必须在脑海中理解间接。
我个人更喜欢第二种形式。但更重要的是:就我个人而言,我更愿意将时间浪费在更重要的问题上。 ;-)
你会写:
__typeof__(self) copy = [self copy];
我不会。
我最近开始这样写:
__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;
再次获得强引用
这两个都是代码片段,所以我实际上并没有打太多字,也不必记住确切的语法。