Properties

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


Leave a Reply

Your email address will not be published. Required fields are marked *