为了账号安全,请及时绑定邮箱和手机立即绑定

请问使用alloc init而不是新的

/ 猿问

请问使用alloc init而不是新的

慕标5265247 2019-08-01 02:00:09

使用alloc init而不是新的

学习目标-C和读取示例代码时,我注意到对象通常是使用这种方法创建的:

SomeObject *myObject = [[SomeObject alloc] init];

而不是:

SomeObject *myObject = [SomeObject new];

正如我所读到的,这是否有其原因?


查看完整描述

3 回答

?
眼眸繁星


这里有很多原因:http:/mac科研.org/-alloc-init-和-new之间的差异

一些选定的方案是:

  • new

    不支持自定义初始化器(如

    initWithString)

  • alloc-init

    new

一般的看法似乎是,你应该使用你觉得舒服的任何东西。





查看完整回答
反对 回复 2019-08-02
?
芜湖不芜

很老的问题,但我写了一些例子只是为了好玩-也许你会发现它是有用的;)

#import "InitAllocNewTest.h"@implementation InitAllocNewTest+(id)alloc{
    NSLog(@"Allocating...");
    return [super alloc];}-(id)init{
    NSLog(@"Initializing...");
    return [super init];}@end

在主要职能方面,这两项声明:

[[InitAllocNewTest alloc] init];

[InitAllocNewTest new];

结果相同的产出:

2013-03-06 16:45:44.125 XMLTest[18370:207] Allocating...
2013-03-06 16:45:44.128 XMLTest[18370:207] Initializing...


查看完整回答
反对 回复 2019-08-02
?
慕沐林林


+new等于+alloc/-init苹果的NSObject执行。这是极不可能改变的,但取决于你的偏执程度,苹果的文档+new似乎允许在将来更改实现(并打破等效关系)。出于这个原因,由于“显式优于隐式”和历史连续性,目标-c社区通常避免使用。+new..但是,您通常可以通过顽固地使用+new.


查看完整回答
反对 回复 2019-08-02
  • 3 回答
  • 0 关注
  • 121 浏览
我要回答

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信