2012-03-20 144 views
0

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

回答

0

,只要你想你可以命名您的自定义初始化,但有一个惯例,开始你的初始化方法与“初始化”。

在您编写的示例中,对象是所有层次结构的根类的NSObject的子类。关键字super引用了层次结构中上面的类(您的类的超类),所以基本上,您调用的方法是,该方法在为内存分配内存后立即创建并初始化对象(这就是alloc方法所做的) 。然后,检查该方法是否返回对象并初始化您自己的属性。

看看这个指南,并确保你了解那里的所有内容https://developer.apple.com/library/mac/#documentation/cocoa/conceptual/objectivec/introduction/introobjectivec.html

0

当你调用

self.myObject = [self.myObject newObjectWithStuff:newStuff]; 

你只是让在现有的存储位置的参考。如果你真的想要一个新的对象,你应该调用像

self.myObject = [[MyObject alloc] initWithNewStuff:newStuff]; 

的页头关键字分配内存变量