[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.

object c中 new和alloc区别

在object-c基础教程这本书里老是可以看见类似下面这种代码,我这小菜鸟就纳闷了,啥区别啊,看上去都一样么。网上找了找,找到一些说法,这里先摘出来。     className* object = ...
  • wangjiwei2010
  • wangjiwei2010
  • 2015年07月25日 15:53
  • 1129

object c中 new和alloc区别

在object-c基础教程这本书里老是可以看见类似下面这种代码,我这小菜鸟就纳闷了,啥区别啊,看上去都一样么。网上找了找,找到一些说法,这里先摘出来。     className* object =...
  • newjerryj
  • newjerryj
  • 2013年02月01日 09:07
  • 13695

随笔-浅谈内存管理的常用词:alloc、retain、dealloc、release

ARC:Xcode的新默认编译器Apple LLVM,代替了以前的LLVM-GCC ,使用了Clang作为前端,Clang带有一个静态分析器,在代码编译前会进行分析,在需要加入retain和relea...
  • Axing1991
  • Axing1991
  • 2015年04月07日 15:29
  • 887

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

——————————————————————————————————————————— 类方法   ①类方法:        + 开头的方法(定义的过程形式和对象方法一样,只不过 + 开头,这是唯...
  • Felicity294250051
  • Felicity294250051
  • 2015年08月20日 09:44
  • 1548

【OC学习-11】ARC和内存管理里面的alloc、assign、new、retain、copy、mutableCopy、release说明

一般我们在开发程序时,只管alloc,不需要管release,因为有ARC帮我们管理。但是在学习时仍需要了解:内存是有限的,在堆区分配了内存后,如果不需要,则要回收,不然内存不够引起崩溃。...
  • wsb200514
  • wsb200514
  • 2014年09月03日 19:32
  • 1196

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

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

ios中alloc和new的区别

1.在实际开发中很少会用到new,一般创建对象咱们看到的全是[[className alloc] init] 但是并不意味着你不会接触到new,在一些代码中还是会看到[className new], ...
  • u012383818
  • u012383818
  • 2016年01月24日 17:16
  • 1347

C语言:malloc()函数与alloc()函数

本文介绍C语言的malloc()函数与alloc()函数。   C语言跟内存分配方式   (1) 从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间...
  • njucsyyh
  • njucsyyh
  • 2013年03月22日 00:19
  • 5456

STL源码剖析 --- 空间配置器 std::alloc

STL是建立在泛化之上的。数组泛化为容器,参数化了所包含的对象的类型。函数泛化为算法,参数化了所用的迭代器的类型。指针泛化为迭代器,参数化了所指向的对象的类型。STL中的六大组件:容器、算法、迭代器、...
  • yusiguyuan
  • yusiguyuan
  • 2014年12月07日 23:24
  • 1201

iOS开发new与alloc/init的区别

内存管理     范围: 任何继承了NSObject 的对象,对基本数据类型无效    原理: 每个对象内部都保存了一个与之相关联的整数,称为引用计数器(auto referenc...
  • LVXIANGAN
  • LVXIANGAN
  • 2015年04月06日 21:19
  • 12090
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[Objective-C] alloc和init要嵌套写而不要分开写
举报原因:
原因补充:

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