[Objective-C] alloc和init要嵌套写而不要分开写

转载 2015年07月09日 13:54:43

转自:

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/WorkingwithObjects/WorkingwithObjects.html#//apple_ref/doc/uid/TP40011210-CH4


下面的写法是不建议的

NSObject* someObject = [NSObject alloc];
[someObject init];

建议的做法是

NSObject* someObject = [[NSObject alloc] init];


因为,[NSObject alloc] 的返回值和 [someObject init] 的返回值未必是同一个值。如果不一致,对 someObject 发送message,就相当于于找错对象了,并且这个对象有可能是没有被初始化过的


有些 class factory 方法可以替代这里的 alloc/init 嵌套做法,用一个方法把二者都做了,效果和先 alloc 紧接着 alloc 是一样的,比如:

NSNumber *magicNumber = [NSNumber numberWithInt:42];


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


原文如下:

Note: It’s possible for init to return a different object than was created by alloc, so it’s best practice to nest the calls as shown.

Never initialize an object without reassigning any pointer to that object. As an example, don’t do this:

    NSObject *someObject = [NSObject alloc];
    [someObject init];
If the call to init returns some other object, you’ll be left with a pointer to the object that was originally allocated but never initialized.

相关文章推荐

OC中为什么要使用alloc/init而很少使用new

在OC中,新建一个对象可以有两种方式[class_name alloc] init]和[class_name new]那么这两种有什么区别呢,哪一个更好呢 下面我们就来探讨一下 以上是代码段,结...

Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)等

对象在运行时获取其类型的能力称为内省。内省可以有多种方法实现。判断对象类型-(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例-(BOOL) isMem...

逆向分析isKindOfClass 内部实现

前段时间,同事给看了一段有趣的代码。对于这段代码执行的结果的出乎意外,我们产生了各种的猜测。但猜测毕竟只是猜测,难免会有误会。对于isKindOfClass的实现很好奇,于是决定探究一下isKindO...

[Objective-C] isKindOfClass 和 class 方法

参考: https://developer.apple.com/library/prerelease/ios/documentation/Cocoa/Reference/Foundation/Pro...

Objective-C 【类方法/对象方法-匿名类-new&alloc init区别】

——————————————————————————————————————————— 类方法   ①类方法:        + 开头的方法(定义的过程形式和对象方法一样,只不过 + 开头,这是唯...

Objective-c - 构造方法(init方法)和init方法的重写

/*    1> 创建一个对象,那么就调用这个类的new方法.    2> new方法是一个类方法,new方法做的事情:     1>在堆区开辟空间存储对象,这个对象中会...

从 Objective-C 里的 Alloc 和 AllocWithZone 谈起

一、问题起源 一切起源于Apple官方文档里面关于单例(Singleton)的示范代码:Creating a Singleton Instance. 主要的争议集中在下面这一段: ...

Objective-C中Alloc和AllocWithZone

1、先看看单例的实现代码#import "Singleton.h"@implementation Singleton static Singleton* _instance = nil; +(inst...

Objective-C 编程语言(3) 定义类---分配并初始化对象,init方法的返回值,初始化方法的实现

转载请标明出处:http://blog.csdn.net/zhangxingping 分配并初始化对象 分配并初始化对象     在Objective-C中创建一个对象需要两步:   ...

Objective-C:init初始化

编写初始化方法时,应该遵循以下原则: 1、创建新类时,如果指定初始化方法的方法名和父类不同,就需要在类的头文件种注释(BNROwnedAppliance是BNRAppliance子类): ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)