2012-03-20 21 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; 
} 

また、非初期化メソッドを使用して作成することはできますか?私のコードで

if (self = [super init]) 

は何をするのか:

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

または

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

私は私の質問は、に帰着すると思いますか?

辞書などの他のオブジェクトを扱う場合、「NSDictionary * myDict = myOtherDict」は完全に有効です。

答えて

0

のためのメモリを割り当てますが、あなたの初期化メソッドを開始する慣習がありますその中で"。

あなたが書いた例では、オブジェクトはすべての階層のルートクラスNSObjectのサブクラスです。キーワードsuperは階層の上のクラス(クラスのスーパークラス)を参照していますので、基本的にメソッドをNSObjectと呼びます。これは、メモリが割り当てられた直後にオブジェクトを作成して初期化します(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]; 

のallocキーワードのように呼び出す必要がありますが、あなたが好きなあなたは、カスタム初期化子に名前を付けることができ、可変