Objective c __弱类型的(自我)弱自我=自我或_弱MyObject*weakSelf=自我?

Objective c __弱类型的(自我)弱自我=自我或_弱MyObject*weakSelf=自我?,objective-c,multithreading,grand-central-dispatch,Objective C,Multithreading,Grand Central Dispatch,这里最好使用什么?为什么 __weak typeof(self) weakSelf = self; 或 显然,\uuu弱id weakSelf=self将是最不可取的,因为我们不会得到类型检查,对吗 然而,在前两者之间。。。哪些是可取的,为什么 __weak typeof(self) weakSelf = self; 另外,如果clang支持使用typeof,那么使用uu-typeof而不是typeof的任何理由都更方便,因为无论是什么类,代码都是相同的。您可以使用Xcode代码段插入typ

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

__weak typeof(self) weakSelf = self;

显然,
\uuu弱id weakSelf=self将是最不可取的,因为我们不会得到类型检查,对吗

然而,在前两者之间。。。哪些是可取的,为什么

__weak typeof(self) weakSelf = self;

另外,如果clang支持使用typeof,那么使用uu-typeof而不是typeof的任何理由都更方便,因为无论是什么类,代码都是相同的。您可以使用Xcode代码段插入
typeof
——使用较少按键的代码行。如果您更改了类的名称,您要做的工作也会减少

我不知道使用
typeof
-版本有什么坏处,只是可能有点难以理解


正如您可能知道的那样,
\uuuuuuuuuuuuuuuuuuuuuuuuuu()
“扩展”到参数的具体类型。如果参数是
self
,而
self
的具体类型是
MyObject
(这就是您的情况),那么它就是相同的

因此,第一种形式只是另一种间接形式,具有间接形式通常的优点和缺点:

  • 间接形式更灵活,因为间接形式遵循更改

  • 间接形式的可读性较低,因为读者必须在头脑中理解间接形式

就我个人而言,我更喜欢第二种形式。但更重要的是:就个人而言,我宁愿把时间浪费在更重要的问题上

请你写:

__typeof__(self) copy = [self copy];

我不会的。

我最近开始这样写:

__typeof(self) __weak weakSelf = self;
使用
\uuu typeof
版本可以让您使用代码片段,因此速度更快,而且在整个代码中也会保持一致

这不是常见的形式,因为大多数人将
\uu弱
变量限定符放在开头,但根据这里的文档:变量限定符放在类型之后

进入区块后,我使用:

__typeof(weakSelf) __strong strongSelf = weakSelf;
if (!strongSelf) return;
再次获得有力的参考


这两个都是代码片段,所以我实际上不需要太多的输入,也不需要记住确切的语法。

这不是一个基于opinon的问题。编译器以不同的方式处理这两个语句,因此这两种用法都有其优缺点。@MichałCiuba它们有优缺点,但没有明确的答案。不同的人会阅读利弊,做出不同的选择。因此它是基于观点的。你能详细说明一下代码片段吗?这些小宏可以在xcode IDE中创建吗?当然,xcode包含一些代码段支持,但我更喜欢使用Dash,因为我也将它用于文档。它允许您设置一个关键字,当您键入它时,它会自动被代码段替换。因此,我使用
weakSelf
strongSelf
来处理这两个问题。这就是我必须输入的所有内容,我一直在为我完成所有复杂的语法。我还有一些设置公共块等的代码片段,因为记住这些代码的语法很痛苦。谢谢。此外,是否需要在块中定义一次强。这是默认值,对吗?或者,为了对称,您是否将其放置在更多位置?我相信您是正确的,您不需要
\u strong
限定符,因为它是默认的,但我使用它来增加可读性。这让其他阅读代码的人明白了为什么我们要创建另一个变量。我疯狂地试图将一行代码拖到代码段中来创建代码段。有菜单选项或键盘快捷键吗?我真的不能抓住一行文字并把它拖过来。试了50次。