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次。