nonatomic
– By default, access to the property is protected by guards that prevent multiple threads from interfering with each other. Normally this is not a problem, and one would specify nonatomic because it is faster.
-nonatomic will make no protection against multiple threads
retain/copy/assign
– retain increases the retain count and asserts ownership of the object
– copy creates a new variable with a new pointer and a retain count of 1
– assign just assigns, and it ithe default
readwrite/readonly
– readonly is used when only the getter will be declared
– the default is readwrite
// Person.h 헤더 파일
@interface Person : NSObject
{
NSString * name;
int age;
BOOL enable;
UIImage * image;
}
@property int age;
@property (nonatomic, copy) NSString * name;
@property (readonly, assign) BOOL enable;
@property (nonatomic, retain) UIImage * image;
// 위의 정의(declaration)는 아래의 getter/setter 정의를 생성해준다
// – (int) age;
// – (void) setAge: (int) newValue;
// – (NSString *) name;
// – (void) setName: (NSString *) newValue;
// – (BOOL) enable;
// – (UIImage *) image;
// – (void) setImage: (UIImage *) newValue;
@end
// Person.m 구현 파일
@implementation Person
@synthesize age;
@synthesize name;
@synthesize enable;
// 위의 코드는 아래의 getter/setter 코드를 생성해준다
// – (int) age {
// return age;
// }
// – (void) setAge: (int) newValue {
// age = newValue;
// }
// value 객체 (NSString, NSInteger와 같은)가 함수의 인자로 전달되거나
// 함수로부터 반환될 때, 객체자체보다는 일반적으로 복사본(copy)를 사용한다.
// – (NSString *) name {
// return name;
// }
// – (void) setName: (NSString *) newValue {
// if (name != newValue) {
// [name release];
// name = [newValue copy];
// }
// }
// – (BOOL) enable {
// return enable;
// }
// image 에 새로운 객체를 설정하면, 그 새로운 객체에 retain 을 한번 호출해 준다.
// 이는 외부에서 그 객체를 release 하더라도 객체가 메모리 해제되지 않도록
// 유지하기 위함이다.
// – (UIImage *) image {
// return image;
// }
// – (void) setImage: (UIImage *) newValue {
// if (image != newValue) {
// [image release];
// image = [newValue retain];
// }
// }
-(id) init {
// …. 중간생략
}
@end