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

请问使用alloc init而不是新的

请问使用alloc init而不是新的

小唯快跑啊 2019-08-01 02:00:09
使用alloc init而不是新的学习目标-C和读取示例代码时,我注意到对象通常是使用这种方法创建的:SomeObject *myObject = [[SomeObject alloc] init];而不是:SomeObject *myObject = [SomeObject new];正如我所读到的,这是否有其原因?
查看完整描述

3 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

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

#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
?
慕沐林林

TA贡献2016条经验 获得超9个赞


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


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

添加回答

举报

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