1. 수식어1 : setter 만들지 말지 여부
// 기본 상태 (default)
@property(readwrite) UILabel *resultLabel;
@property UILabel *resultLabel;
// 읽기만 가능 = setter 만들어지지않음
@property(readonly) UILabel *resultLabel;
2. 수식어2 : 생존기간
// 기본 상태 (default)
@property(strong) IBOutlet UITextField *tempText;
@property IBOutlet UITextField *tempText;
// strong 생략해도 기본으로 적용됨
// 객체에 소유권 있음
// 보통 클래스의 인스턴스에서 사용
// retain counter를 하나 증가시킴
// 읽기만 가능 = setter 만들어지지않음
@property(weak) UILabel *resultLabel;
// weak 생략 불가
// 소유권이 없어서, 대상 객체가 해제되면 nil이 됨
// 주소만 참조
// 기본 자료형에 적합합니다. integer처럼!
3. 수식어3 : 멀티스레드 고려
// 기본 상태 (default)
@property(atomic) IBOutlet UITextField *tempText;
@property IBOutlet UITextField *tempText;
// 생략해도 기본으로 적용됨
// 프로퍼티에 접근할 때 lock과 unlock 반복
// 멀티 스레드 환경에서 공유되는 리소스에 사용함
// 읽기만 가능 = setter 만들어지지않음
@property(nonatomic) UILabel *resultLabel;
// nonatomic 생략 불가
// 일반적인 환경에서 빠름
4. 초기 값 (생략 가능한거 리마인드)
// 생략해도 되는 기본설정값
readwrite
strong
atomic
5. property, synthesize 사용하기
get, setter 소스를 생략해줌
// vim MyClass.h
#import <Foundation/Foundation.h>
@interface MyClass : NSObject {
int howMany;
}
@property int howMany;
-(void)add: (int)howMany;
@end
// vim MyClass.m
#import "MyClass.h"
@implementation MyClass
@synthesize howMany;
-(void)add: (int)x {
howMany += x;
}
@end
// vim main.m
#import "MyClass.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// alloc : 메모리 할당
// init : 초기화
MyClass *myObjt = [[MyClass alloc] init];
[myObjt setHowMany: 20];
NSLog(@"%d", [myObjt howMany]);
[myObjt add:5];
NSLog(@"%d", [myObjt howMany]);
[myObjt add:5];
NSLog(@"%d", [myObjt howMany]);
}
return 0;
}
6. 심지어 dot notation 사용 가능
myObjt.howMany = 20; // set
my.Objt.howMany; // get -> 20
// vim main.m
#import "MyClass.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// alloc : 메모리 할당
// init : 초기화
MyClass *myObjt = [[MyClass alloc] init];
[myObjt setHowMany: 20];
NSLog(@"%d", [myObjt howMany]);
[myObjt add:5];
NSLog(@"%d", [myObjt howMany]);
[myObjt add:5];
NSLog(@"%d", [myObjt howMany]);
myObjt.howMany= -20;
NSLog(@"%d", myObjt.howMany);
[myObjt add:10];
NSLog(@"%d", myObjt.howMany);
}
return 0;
}
7. 생략 가능
- @property를 사용할 경우, @interface에서 선언했던 instance variable을 생략할 수 있습니다.
// vim MyClass.h
#import <Foundation/Foundation.h>
@interface MyClass : NSObject /* {
int howMany;
}
>>> instance variable 생략 */
@property int howMany;
-(void)add: (int)howMany;
@end
- 또한 @synthesize도 생략할 수 있습니다. 대신, 해당 변수 활용시 변수명 앞에 _를 사용해야합니다.
// vim MyClass.m
#import "MyClass.h"
@implementation MyClass
// @synthesize howMany;
-(void)add: (int)x {
_howMany += x;
}
@end
- 물론 해당 변수인 howMany에 외부에서 접근할 경우에는 _를 사용하지 않습니다. m 파일 안에 synthesize를 생략했기 때문에 그 파일 안에서만 작성합니다. 즉, 위 6번 문항의 main.m에서 달라진 내용이 없습니다.
// vim main.m
#import "MyClass.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
// alloc : 메모리 할당
// init : 초기화
MyClass *myObjt = [[MyClass alloc] init];
[myObjt setHowMany: 20];
NSLog(@"%d", [myObjt howMany]);
[myObjt add:5];
NSLog(@"%d", [myObjt howMany]);
[myObjt add:5];
NSLog(@"%d", [myObjt howMany]);
myObjt.howMany= -20;
NSLog(@"%d", myObjt.howMany);
[myObjt add:10];
NSLog(@"%d", myObjt.howMany);
}
return 0;
}
'Development > iOS' 카테고리의 다른 글
[Objective-C] 입문하기 - 18 : Dictionary 기본 예제 및 NSMutableDictionary 가변 딕셔너리 사용해 데이터 삽입 , 변경 , 삭제 실습 및 배열 중복값 제거 실습 (0) | 2023.07.08 |
---|---|
[Objective-C] 초보자의 언어 익혀보기 - 인스턴스 사용 기본 예제 (0) | 2023.07.08 |
[Objective-C] 앱 만들기 입문 - 5 : api call 후 return받은 데이터 사용하기 (0) | 2023.07.07 |
[Objective-C] 앱 만들기 입문 - 4 : json file 읽어서 저장된 데이터 사용하기 (0) | 2023.07.06 |
[Objective-C] 앱 만들기 입문 - 3 : 상하(위아래) 스크롤 기능 넣기 (0) | 2023.07.05 |