猿问
下载APP

请问使用alloc init而不是新的

使用alloc init而不是新的

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

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

而不是:

SomeObject *myObject = [SomeObject new];

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


慕标5265247
浏览 53回答 3
3回答

眼眸繁星

这里有很多原因:http:/mac科研.org/-alloc-init-和-new之间的差异一些选定的方案是:new不支持自定义初始化器(如initWithString)alloc-init比new一般的看法似乎是,你应该使用你觉得舒服的任何东西。

芜湖不芜

很老的问题,但我写了一些例子只是为了好玩-也许你会发现它是有用的;)#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...

慕沐林林

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