初始化方法

时间:2012-03-20 16:49:56

标签: objective-c ios

我有一个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”是完全有效的。

2 个答案:

答案 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中的所有内容。