내 클래스 MyClassName
에 정의 된 myPropertyName
이라는 속성이 있다고 가정합니다. 수동 메모리 관리는이 게시물 전체에서 사용됩니다.초기화 된 속성 또는 인스턴스 변수
MyClassName.h
#import <UIKit/UIKit.h>
@interface MyClassName : NSObject {
@private
NSObject* myPropertyName;
@public
}
@property (nonatomic, retain) NSObject* myPropertyName;
// Some methods prototypes are here
@end
MyClassName.m
#import "MyClassName.h"
@implementation MyClassName
@synthesize myPropertyName;
// Some methods are here
@end
I는 myPropertyName
선언 인스턴스 변수 사이의 차이의 장소 용도 혼동 해요. 예를 들어, 내 클래스 myClassName
에 대한 사용자 정의 -(void)init
메소드에서와 같이이 세 가지 초기화 코드 문장 간의 차이점은 무엇입니까?
self.myPropertyName = [[[NSObject alloc] init] autorelease];
- 이 하나가
myPropertyName
세터를 호출,하지만 난 세터에서 사용되는 인스턴스 변수 존재의 이름이 무엇인지 확실하지 않다,myPropertyName
는 (나는 @private 필드를 선언 한 이후myPropertyName
) 또는_myPropertyName
(언더 바를 가진 사람이 기본값이라고 사람들이 말했습니까?) myPropertyName = [[NSObject alloc] init];
이는
myPropertyName
속성의 인스턴스 변수를 초기화합니까?@synthesize myPropertyName = _myPropertyName;
이 없으면이 속성의 기본 인스턴스 변수가_myPropertyName
이라고합니다. 내가@synthesize myPropertyName;
및@private NSObject* myPropertyName;
를 사용myPropertyName
경우에도
는_myPropertyName = [[NSObject alloc] init];
_myPropertyName
은 여전히 내 재산의 인스턴스 변수로 선언되어 있습니까? 제 이해
는, 속성은 단지 이름 (예 myPropertyName
등) 등의 값을 할당 코드와 실제 작업에 사용되는 캡슐화 일부 인스턴스 변수가 있어야한다.
더 이상'@ synthesize' 할 필요가 없습니다. 당신의 실제 질문 인 것처럼, 당신은 상응하는'ivar'없이'@ property'를 가질 수 있습니다. – nhgrif