我有一个MyObject。当我的程序运行时,我创建一个新的MyObject
self.myObject = [[MyObject alloc] initWithStuff:stuff];
稍后在我的代码中,我需要创建一个新的MyObject。
我的问题是,我是否需要使用“init”方法创建一个新的MyObject?
.h
#import <UIKit/UIKit.h>
@interface MyObject : NSObject
{}
-(id)initWithStuff:(NSString *)stuff;
-(id)initWithNewStuff:(NSString *)newStuff;
-(id)newObjectWithStuff:(NSString *)newStuff;
@end
.m
-(id)initWithStuff:(NSString *)stuff;
{
if (self = [super init])
{
self.myStuff = stuff;
}
return self;
}
-(id)initWithNewStuff:(NSString *)newStuff;{
if (self = [super init])
{
self.myStuff = newStuff;
}
return self;
}
-(id)newObjectWithStuff:(NSString *)newStuff;
{
self.myStuff = newStuff;
return self;
}
或者我可以使用非init方法创建吗?
在我的代码中:
self.myObject = [[MyObject alloc] initWithNewStuff:newStuff];
或
self.myObject = [self.myObject newObjectWithStuff:newStuff];
我想我的问题可以归结为:
是什么if (self = [super init])
办?
使用其他对象(如词典),我知道“NSDictionary * myDict = myOtherDict”是完全有效的。
答案 0 :(得分:0)
当你打电话时
self.myObject = [self.myObject newObjectWithStuff:newStuff];
您只是在现有内存位置上进行参考。如果你真的想要一个新的对象你应该像
一样调用self.myObject = [[MyObject alloc] initWithNewStuff:newStuff];
alloc关键字为变量
分配内存答案 1 :(得分:0)
您可以根据需要为自定义初始值设定项命名,但是有一个惯例是使用“init”启动初始化方法。
在您编写的示例中,对象是NSObject
的子类,是所有层次结构的根类。关键字super
是指层次结构中上面的类(您的类的超类),所以基本上,您调用init
NSObject
方法,它在内存之后创建并初始化一个对象已经为它分配(这是alloc
方法的作用)。然后,检查方法是否返回了一个对象并初始化了自己的属性。
请查看本指南,确保您了解https://developer.apple.com/library/mac/#documentation/cocoa/conceptual/objectivec/introduction/introobjectivec.html中的所有内容。