반응형
Objective C 지시어
- @interface : 클래스 선언
- @implementation : 클래스 구현
- @protocol : Delegate 등 일반적인 선언
- @end : class, category, protocol 종료
선언 지시어
- @property : 프로퍼티 정의
- @synthesize : getter, setter 없이 사용할 때 사용하며 @property 에서 정의한 변수를 사용
- @dynamic : 동적으로 사용하는 메소드와 변수에 사용
특별 지시어
- @class : 사용자 클래스 선언
- @selector(name) : 정의된 메소드 이름을 리턴
- @protocol(name) : 프로토콜 클래스의 인스턴스 리턴
- @encoode(type) : type의 구조를 인코딩하는 문자열 산출
- @synchronized() : 하나의 스레드에 의한 코드 블럭 정의시 사용
함수 선언 방식 (interface)
#import <UIKit/UIKit.h>
// public 프로퍼티 / 메소드 선언
@interface MacBook : NSObject {
NSString *name;
}
// 클래스의 인스턴스 선언
- (NSString *) name;
- (void) setName: (NSString *) newName;
@end
함수 구현 방식 (implementation)
#import "MacBook.h"
@interface MacBook()
// private 프로퍼티 & 메소드 선언
@end
@implementation MacBook {
// private 인스턴스 변수
}
/* 메소드 구현 */
// getter 방식 : 메서드 명이 인스턴스 변수 명
- (NSString *) name {
return name;
}
// setter 방식 : 메서드 명이 set + 인스턴스 변수 명
- (void) setName : (NSString *) newName {
name = newName;
}
@end
프로퍼티 선언
#import <UIKit/UIKit.h>
@interface MacBook : NSObject
@property NSString *name;
@end
// 프로퍼티 접근 방법
_name = @"Mac OS Big Sur";
self.name = @"Mac OS Big Sur";
프로퍼티 구현
#import "MacBook.h"
@implementation MacBook
// Morden Objective-c 이후 synthesize를 사용하지 않는다. (자동 실행)
@synthesize type = _type;
// dynamic은 getter을 직접 설정한다. (안할 시 런타임 에러 발생)
@dynamic version;
@end
// dynamic - getter 설정
- (NSString *) version {
return @"버전 11.0.1";
}
- @property : 함수 선언에서 사용하며 선언 시 속성이 붙는다.
생성 시 자동으로 인스턴스 변수가 생성된다.
name 의 이름을 property를 만들었다면 _name 이름의 인스턴스가 생성된다. - @synthesize : 함수 구현에서 사용하며 property 명과 생성된 인스턴스 변수 명을 호환시킨다.
- @dynamic : 함수 구현에서 사용하며 property 생성 후 getter 도 작성할 시 사용한다.
프로퍼티 속성
/* 프로퍼티 속성 - 기본 */
@property (readwrite) NSString *type; // 기본값. getter, setter 생성
@property (readonly) NSString *version; // getter 생성
@property (getter=newGetName, setter=newSetName:) NSString * name; // 커스텀 가능
/* 프로퍼티 속성 - 옵셔널 */
@property (nonnull) NSString *cost; // nil 불가
@property (nullable) NSString *mouse; // nil 가능
/* 프로퍼티 속성 - 멀티쓰레드 */
@property (atomic) NSStirng *memory; // Lock 사용 (중복 접근 불가)
@property (nonatomic) NSString *graphic; // 중복 접근 가능
/* 프로퍼티 속성 - 참조 카운트 (RC) */
@property (weak) NSArray *users; // ARC 사용시 사용 - 약한 참조
@property (strong) NSString *user; // ARC 사용시 사용 - 강한 참조 (RC 증가)
@property (assign) NSArray *cores; // 약학 참조
@property (retain) NSNumber *power; // 강한 참조 (RC 증가)
@property (copy) NSString *playstore; // 값 참조 (복사, RC 증가)
- atomic : 쓰레드가 atomic으로 선언된 memory를 사용할 경우 타 쓰레드는 memory에 접근할 수 없다.
- nonatomic : 쓰레드가 property에 중복 접근 가능히며 성능 향상을 위해 주로 사용된다.
- assign : 객체가 해제되어도 포인터 값은 변하지 않는다.
- weak : 객체가 해제되는 시점에 포인터 값은 nil이 된다.
- retain : 객체의 소유권을 획득한다. (RC 증가)
- strong : retain 과 동일하며 ARC를 사용하면 strong을 사용한다.
- copy : 새로운 객체를 생성한다. (해당 객체의 RC 증가)
Objective c 메모리 관리
- alloc, new, copy, mutableCopy : 생성, 소유권 획득
- retain : 소유권 획득 (RC 증가)
- release : 소유권 포기 (RC 감소)
- autorelease : 소멸
반응형
'개발 > Objective-C' 카테고리의 다른 글
[Objective-C] Swift와 비교 (2) - 변수 생성 및 ViewController (0) | 2021.12.16 |
---|---|
[Objective-C] Swift와 비교 (1) - 함수, 타입 선언 편 (0) | 2021.12.16 |