2012-03-14 3 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 ivars의 경우 보통 copy입니다. NSDate ivar의 경우 retain. copyNSString 인 이유는 이 init 방법으로 전달 된 경우입니다. 매개 변수를 복사하면 클래스에 의해 변형되지 않습니다. 따라서 캡슐화가 보장됩니다.

+5

두 가지 문제가 있습니다. ARC를 사용하는 경우에도 복제 의미론을 사용하여 해당 속성의 사본을 보내야합니다 (ARC는 보존 및 릴리스를 자동으로 추가합니다). 또한'NSDate'는'NSCopying'을 구현하므로'-copy'도 보내야합니다. – JeremyP

+2

일반화 -'NSCopying'을 구현하는 것은'copy' 의미 체계이어야합니다. 그러나, 나는 그것을 변경할 수있는 하위 클래스가 있다면 엄지 손가락 규칙을 사용한다. – deanWombourne

관련 문제