2014-04-03 3 views
-1

ClassA.m는설정 값

ClassB *CB = [[ClassB alloc]init]; 
CB.name = @"my name"; 
[self presentViewController:CB animated:YES completion:nil]; 

ClassB.h는

@interface ClassBViewController : UIViewController 

@property (nonatomic, strong) NSString *name; 

@end 

이 코드를 ClassA CB.name = @"my name";에서 ClassB가의 값을 설정하는 것은 올바른 미세하지만입니다 작품 접근?

+0

시도해 본 결과 어떻게 되었을까요? 어떤 문제가 발생 했습니까? 그렇다면 무슨 일이 있었는지 설명하십시오. –

+0

뭔가 다른 일을해야하는 정말 좋은 이유가 없다면, 변경 가능/불변 변형을 가진 클래스의 인스턴스를 ** 복사 **해야합니다. –

+0

@JodyHagins 조금 자세하게 설명해주세요. 고마워요. –

답변

1

속성을 강하게 정의하면 개체에 대한 강력한 참조가 유지됩니다.

누군가가 NSMutableString을 주면 어떻게 될지 생각해보십시오. 당신은 그것에 대한 참조를 유지하고 나중에 그것을 변경합니다. 당신은 더 이상 당신이 준 문자열을 가지고 있지 않습니다.

당신이 사용하는 경우 당신은 항상 당신이 실제로 주어진 것을 계속 의미는 (그들이 당신에게 불변의 객체를 주면 보통 멀리 최적화) 개체의 복사본을 강제 대신 강력한 의 사본.

0

속성의 경우 [CB setName : @ "my name"]을 사용하는 것이 더 명확합니다. 컴파일러가 속성에 대한 getter와 setter를 만들 수 있도록 ClassB.m 파일에 @synthesize 문이 필요합니다.

+0

Clang의 가장 최근 버전에서'@ synthesize'가 필요하지 않습니다. –

+0

사실, 늙은 습관이 힘들어 질 수도 있습니다. – RobP

0

실제로는 유일한 접근 방법입니다. Class AClass B의 속성에 대해 아무것도 모르기 때문에 Class B의 개체는 해당 속성에 액세스하려면 Class A 내부에서 인스턴스화해야합니다.