Mat*_*off 7 iphone objective-c init alloc
在以下示例中,可能出现的问题是什么.
id c = [Person alloc];
[c init];
Run Code Online (Sandbox Code Playgroud)
Cal*_*leb 14
您的示例中的代码的主要问题是,在某些情况下,-init方法返回的对象与您使用+ alloc创建的对象不同.如果发生这种情况,那么你的代码就不正确了,因为你没有将结果[c init]赋给c,你最终会使用错误的对象(以及那个没有正确初始化的对象).这就是为什么标准习惯用法总是在同一行上组合+ alloc和-init:
id c = [[Person alloc] init];
现在,您可能已经编写了Person类并且掌握了第一手知识 - 总是返回相同的对象,但我不必非常熟悉Person的内部工作方式来阅读您的代码并了解它是否是是否正确.你的代码是"更好的",因为任何人都可以告诉你,如果按照通常惯例,它正在做正确的事情.
我认为将c声明为类型id并不可怕,但在这种情况下它似乎很愚蠢.你知道 c将是Person*类型,那么为什么要将它声明为id并抛弃编译器可以用来帮助你编写更好代码的有用信息?如果有充分的理由使用id,那很好,但如果你可以更具体地说明你应该这样做的类型.
| 归档时间: |
|
| 查看次数: |
203 次 |
| 最近记录: |