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 次 |
| 最近记录: |