2013-07-11 3 views
0

클래스의 공용 전역 변수와 클래스 속성 간의 차이점은 무엇입니까 (Objective-C는 주로 iOS 프로그래밍). 필자가주의해야 할 점은 포인터 표기법을 사용하여 도트가 아닌 클래스의 전역 변수에 액세스해야한다는 것입니다.속성과 전역 변수의 차이점 [objective c]

글로벌을 사용하는 속성에서 속성을 사용하는 코드를 변경하면 프로그램이 변경 될 수 있음을 읽었습니다. 그게 사실인가요? 그렇다면 왜?

감사합니다.

편집 :

Block.h

공공 글로벌 변수 (I 생각?) :

@interface Block : GameObject { 
    @public 
    int type; 
    SKEmitterNode *particles;} 

재산권

를 [편집 지금이이 인스턴스 변수입니다 덕분에 이해]
@property (nonatomic) CGFloat x; 
+2

클래스에는 전역 변수가 없습니다. – peko

+0

이는 인스턴스 변수입니다. [Property versus instance variable] (http://stackoverflow.com/questions/719788/property-vs-instance-variable) 및 기타 많은 것을보십시오 ... –

답변

2

아니요, 이것은 "전역 변수"가 아닙니다.

인스턴스 변수라고합니다.

속성에는 연결된 인스턴스 변수가 있지만 (반드시 그런 것은 아니지만) 현대 컴파일러는이 속성을 숨 깁니다.

인스턴스 변수를 사용 사이의 큰 차이는 속성이 항상 귀하의 경우 setX:(CGFLoat)x?과에 (의 접근을 통해 액세스 할 수 있다는 것입니다 -. (CGFloat) x` 당신이 원하는 경우

, 이러한 접근을 덮어 쓰기 수 변수에 액세스 할 때마다 특별한 처리, 말을 할.

을 직접 인스턴스 변수를 사용하여 접근을 우회하는 것이 가능하다. 자동 합성 바르의 경우,이 _x 될 것입니다.

->은 필요하지 않습니다. 두 경우 모두

+1

속성이 반드시 인스턴스 변수에 의해 백업되지는 않습니다. –

+0

마틴 (Martin)이 맞습니다. 바로 편집해야합니다. readwrite 속성도 iVar에 의해 반드시 백업되지는 않습니다.내 마음이 어디 있니? ... – below

+0

"1) 당신이'self'가 아닌 다른 객체에 접근하고 있거나, 2) 인스턴스 변수를 숨기는 같은 이름을 가진 지역 변수가 없다면 ->는 필요하지 않습니다. – newacct

1

클래스 속성조차도 글로벌 변수가 아니더라도 클래스 변수를 반환합니다. 당신은 읽기 전용 속성을 만들 수 있습니다

  • :

    그러나 속성 하나

    변수에 대한 액세스를 지키고 추가 게이트 키퍼가 있습니다.
  • Finetune 메모리 의미론 (복사, 할당 등).
  • KVO를 사용하면 변경 사항을 자동으로 전파 할 수 있습니다.
+1

속성은 인스턴스 변수에 의해 반드시 백업되지는 않습니다. –