2011-08-08 2 views
1

가능한 중복 :
Properties declared as instance variables too?Objective-C @interface의 대괄호 안에 @property 객체를 지정해야합니까?

의 내가 같은 목표 C 클래스 인터페이스 있다고 가정 해 봅시다 : 문자열을 @synthesizes 일부를 않는 @implementation과

@interface { 
    NSString * someString; 
} 

@property (nonatomic, retain) NSString * someString; 

을 다른 것들.

내가 알고 싶은 것은, 대괄호 안에 NSString * someString 개체 포인터 선언이 필요한지 여부입니다. (제쳐두고, 변수가 정의 된 괄호 사이에 특정 용어가 있습니까?) NSString * someString 선언을 생략하면 코드가 잘 작동하는 것처럼 보입니다. @property 줄에는 모두 동일한 정보가 있습니다. 유형. 따라서 변수 선언이 필요하지 않은 경우 옵션이 전혀 존재하지 않는 이유는 무엇입니까? 변수 선언과 @property 선언에 상충되는 유형이있는 경우 어떻게됩니까?

+0

아, 내 나쁜, 내 질문에 정확히 질문 거기 물었다. – Tneuktippa

답변

1

@synthesize은 사전 정의되지 않은 경우 변수를 생성하므로 대부분 필요하지 않습니다. 또한, 사용뿐만 아니라 @synthesize와 자신의 변수를 만들 수 있습니다

@synthesize aVar = _theVariableName; 
getter 메소드 ( aVar), 세터 방법 ( setAVar), 당신이 사용할 수있는 _theVariableName라는 이름의 인스턴스 변수를 작성합니다

메모리 관리 목적. 그러나

, @dynamic가 동일한 작업을 수행 할 경우 나도 몰라, 당신의 자신의 세터와 게터를 구현하는 경우, 당신이 선언을 필요가 있다고 생각 ...

+2

@dynamic은 아무 것도 만들지 않으며 런타임에 구현이 제공 될 것이라고 컴파일러에 알립니다 –

+1

Joshua가 말했듯이; '@dynamic'은 순전히 "이것이 런타임에 존재할 것"이라고 말하는 것입니다. 스스로 구현할 때 ivar이 필요한지 여부는 구현 세부 사항입니다. 때때로 당신은, 때때로 당신은하지 않습니다. – bbum

+0

'레거시'런타임에서는 작동하지 않는다고 지적해야합니다. – Perception

관련 문제