初始化方法
问题描述:
我有一个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;
}
或者我可以使用非初始化方法来创建它吗?
在我的代码:
self.myObject = [[MyObject alloc] initWithNewStuff:newStuff];
或
self.myObject = [self.myObject newObjectWithStuff:newStuff];
我想我的问题归结为:这是什么
if (self = [super init])
吗?
使用其他对象如字典,我知道“NSDictionary * myDict = myOtherDict”是完全有效的。
答
,只要你想你可以命名您的自定义初始化,但有一个惯例,开始你的初始化方法与“初始化”。
在您编写的示例中,对象是所有层次结构的根类的NSObject
的子类。关键字super
引用了层次结构中上面的类(您的类的超类),所以基本上,您调用的方法是,该方法在为内存分配内存后立即创建并初始化对象(这就是alloc
方法所做的) 。然后,检查该方法是否返回对象并初始化您自己的属性。
看看这个指南,并确保你了解那里的所有内容https://developer.apple.com/library/mac/#documentation/cocoa/conceptual/objectivec/introduction/introobjectivec.html。
答
当你调用
self.myObject = [self.myObject newObjectWithStuff:newStuff];
你只是让在现有的存储位置的参考。如果你真的想要一个新的对象,你应该调用像
self.myObject = [[MyObject alloc] initWithNewStuff:newStuff];
的页头关键字分配内存变量