2011-01-11 3 views
1

私自身のカスタムオブジェクトを作成しています。プロパティを保持したり、コピーなどの何かを使用する必要があるのでしょうか?Obj-c:カスタムオブジェクトの処理

@interface Asset : NSObject { 
    NSString *name; 
    NSNumber *assetId; 
    NSNumber *linkId; 
    NSNumber *parentId; 
} 

@property (nonatomic, retain) NSString *name; // should I use retain here or something else? 
@property (nonatomic, retain) NSNumber *assetId; 
@property (nonatomic, retain) NSNumber *linkId; 
@property (nonatomic, retain) NSNumber *parentId; 

@end 

また、私の.mでは、また合成もリリースする必要がありますか?

答えて

1

私の個人的な好み:

@interface Asset : NSObject { 
    // no need to declare them here the @synthesize in the .m will sort all that out 
} 


// use copy for NSString as it is free for NSString instances and protects against NSMutableString instances being passed in...thanks to @bbum for this 
@property (nonatomic, copy) NSString *name; 

// no need for copy as NSNumber is immutable 
@property (nonatomic,retain) NSNumber *assetId; 
@property (nonatomic,retain) NSNumber linkId; 
@property (nonatomic,retain) NSNumber parentId; 

@end 
+1

あなたは 'copy'を使うべきです。それは 'NSString'と可変文字列を渡す誰かに対する防衛のために自由です。 – bbum

+0

ああ..それは私が今日学んだことです...それはNSNumberでも無料ですか?おそらく –

+0

; 'copy'は、変更不可能なオブジェクト(NSArrayのようなものを含む)では一般的に無料です。 –

4

Declared PropertiesでのObjective-Cプログラミング言語の章がcopyが何をするのかを説明し、アクセサを合成について。

1

典型的なケースでは、あなたの.mは、このような行があります:

@synthesize name; 
... 

自動的にgetter/setterメソッドを放出するようにコンパイラに指示します。あなた自身もこれらの書き込み/上書きができます。 だから、誰かがfooAsset.name = xを実行すると、あなたのオブジェクトは自身の 'x'への参照を保持します。 あなたが必要とする他の事は、あなたのメンバーへの参照を解放するdeallocメソッドである:

- (void)dealloc { 
    [name release]; 
    .... 
    [super dealloc]; 
} 

「名前」は割り当てられることはありませんならば、それはまだ適切だろうことに注意してください。 nilは黙って「リリース」メッセージを食べます。

関連する問題