JOM*_*JOM 21 iphone initialization class objective-c
刚刚进行代码审查并开始怀疑:
我想if (self = [super init])
检查分配[super init]
变量的返回值是否self
成功(操作值).因此(self = nil)
实际上是TRUE
.
我认为if ((self = [super init]))
检查self
赋值后的值是什么(变量的值).这样((self = nil))
就可以了FALSE
.
在初始化自己的类时,哪一个是正确的使用方法?Apple文档使用前者(例如这里),我现在正在使用它的样式.
Ben*_*tto 20
他们都做同样的事情.的东西,该if
求值是在其内部的表达,其是在分配所分配的值的值.所以当self
不是零时,你进入if
阻止.
第二种形式抛出它周围的parens来沉默任何潜在的编译器警告有关条件内的赋值,这通常是不好的做法,可能是一个错字.但这是惯用的Objective-C,所以第一种方式做到这一点很好.
Jer*_*myP 13
正如其他人所说,括号在这种情况下并不重要.他们确实重要的是你明确检查nil:
if (self = [super init] != nil) // wrong!
if ((self = [super init]) != nil) // right
Run Code Online (Sandbox Code Playgroud)
!=具有比=更高的优先级所以在第一种情况下,你将[super init] != nil
(可能是真的)的布尔结果赋给self,然后对if进行测试.
就个人而言,我不关心任何一个,但更喜欢在测试之外明确地进行任务.这反映了我的编程背景,这使我相信布尔是一个与整数和指针不同的类型,并且赋值不是表达式,即使在C实现的情况下,我也错了.
self = [super init];
if (self != nil)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5986 次 |
最近记录: |