为什么在Objective-C对象初始化中需要alloc?

web*_*orm 1 objective-c alloc

我一直在浏览Objective-C中的一些教程,当涉及到命令alloc()以及它如何用于初始化对象时,我感到很困惑.

该教程说要做以下事情,我无法弄清楚为什么有必要.

更改

NSDate *now = [NSDate date];
Run Code Online (Sandbox Code Playgroud)

NSDate *now = [[NSDate alloc] init];
Run Code Online (Sandbox Code Playgroud)

为什么这个改变是必要的,因为第一行工作得很好?我想我正在寻找两条线的差异.谢谢!

Sea*_*ell 9

有一个简单的区别和一个更深的区别.

简单的答案是第一个方法在内部包含+alloc/ -initpair - 文档告诉我们它返回一个初始化为当前时间的新日期对象.通常,在某个地方,有人必须打电话+alloc和某种-init方法.有时候那就是你,有时候为你准备了便利方法.

关于差异的更深层答案是+alloc/ -init返回一个由调用者拥有的对象,然后负责-release在某个时刻调用,而不以"alloc"或"new"开头的便利构造函数返回自动释放的对象你不必发布.但是,如果您使用ARC,这主要是学术性的,因为编译器会为您跟踪该详细信息.