2012-03-14 6 views
3

私は、最新のSDKとXCodeでiOS 4アプリケーションを開発しています。4.2NSStringパラメータをコピーまたは保持しますか?

NSStringパラメータについて質問があります。これは私のクラスの定義です:

#import <Foundation/Foundation.h> 

@interface BlogEntry : NSObject 
{ 
    NSString* title; 
    NSString* text; 
    NSDate* date; 
    NSString* photo; 
} 

- (id)initWithTitle:(NSString*)titulo text:(NSString*)texto date:(NSDate*)fecha photo:(NSString*)foto; 

@end 

と実装:

#import "BlogEntry.h" 

@implementation BlogEntry 

- (id)initWithTitle:(NSString*)titulo text:(NSString*)texto date:(NSDate*)fecha photo:(NSString*)foto 
{ 
    if (self = [super init]) 
    { 
     title = titulo; 
     text = texto; 
     date = fecha; 
     photo = foto; 
    } 
    return self; 
} 

@end 

私はinitWithTitleパラメータを保持する必要があるかもしれませんか?それとも、コピーする必要がありますか?

答えて

4

ARC、no。非ARCなら、はい。

NSStringイナールの場合、通常copyです。 NSDate ivarについては、retaincopyNSStringの理由は、NSMutableStringがお客様のinitメソッドに渡された場合です。パラメータをコピーすると、クラスによってそのパラメータが変更されることはありません。したがって、カプセル化が保証されます。

+5

2つの問題があります。 ARCを使用している場合でも、コピーセマンティクスを持つプロパティのコピーを送信する必要があります(ARCでは、保持と解放が自動的に追加されます)。また、 'NSDate'は' NSCopying'を実装していますので、 '-copy'も送るべきです。 – JeremyP

+2

一般化 - 'NSCopying'を実装するものは' copy'セマンティクスでなければなりません。しかし、私は、それが変更可能なサブクラスを持っているならば、 'それをコピーする'という経験則を使用します。 – deanWombourne

関連する問題