@interface RandomObject : NSObject
{
NSString* someObject; // I know I don't have to explicitly declare. Just to clarify my point.
}
@property (nonatomic, strong) NSString *someObject;
@end
@implementation RandomObject
@synthesize someObject;
@end
위의 코드와 Xcode 4.3이 사용되었으므로 (따라서 자동 합성 없음) 여기에 내 질문이 있습니다.목표 C : 차별화 된 iVars 및 접근 자
속성/synthesize는 someObject, 즉 getter 및 setter에 대한 접근자를 만듭니다. 따라서 someObject에 값을 할당하려면이 작업을 수행 할 수 있습니다.
내 이해가 정확하다면, 자기는 @ "토마토"를 setSomeObject 메소드에 보냅니다. 그러나 만약 당신이 이것을한다면?
someObject = @"Tomato"; // or maybe _someObject = @"Tomato" if you are doing auto-synthesizing
직접 바르 개체에 액세스하는 나쁜 생각처럼 보이지만, someObject라는부터 개인 변수는 바로, 당신이에 대한 액세스 권한이 같은 클래스 내에서인가?
다른 클래스의 someObject를 조작하려면 self.someOject를 사용해야하는 이유를 알고 있습니다. 그러나 같은 학급에 아직도 있더라도 같은 것을해야 할 필요가있는 이유는 무엇입니까? iVar에 직접 액세스하는 것이 좋지 않은 이유는 무엇입니까?
나는 항상'someObject = @ "Tomato"대신에'self.someObject = @ "Tomato"를 사용하고 모든 것이 완벽하게 작동한다. 결코 오류가 발생하지 않는다. – Moray
내 지식으로는 이것들은 거의 같다. 'self.someObject'는 당신이 작업하고있는 객체의 ivar 값입니다. 'someObject'는 로컬에서 선언 된 변수입니다.이 경우 헤더 파일에 선언 된 ivar입니다. 그래서'self.someObject'를 사용하면'self'의 ivars를보고'someObject'라고 부르는 ivar를 찾을 것입니다. 반면에'someObject'는 ivar로 선언 되었기 때문에 직접 ivar에 값을 할당 할 것입니다. 내가 틀렸다고 말해줘. – Moray
가능한 복제본 [iOS : 모든 iVar이 실제로 소유해야합니까?] (http://stackoverflow.com/questions/5031230/ios-must-every-ivar-really-be-property) – Monolo