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

使用alloc init而不是新的

使用alloc init而不是新的

繁星点点滴滴 2019-07-16 14:42:21
使用alloc init而不是新的学习目标-C和读取示例代码时,我注意到对象通常是使用这种方法创建的:SomeObject *myObject = [[SomeObject alloc] init];而不是:SomeObject *myObject = [SomeObject new];正如我所读到的,这是否有其原因?
查看完整描述

3 回答

?
手掌心

TA贡献1942条经验 获得超3个赞

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

#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-07-16
?
慕姐8265434

TA贡献1813条经验 获得超2个赞

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


查看完整回答
反对 回复 2019-07-16
  • 3 回答
  • 0 关注
  • 489 浏览

添加回答

举报

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