클래스 선언 파일 .h
형식
@interface 클래스명:부모클래스
@end
클래스 구현 파일(행위 동작 코두 작성) .m
#import "클래스명.h"
@implementation 클래스명
@end
객체 생성 방법 -> [["클래스명" alloc] init];
alloc: 객체 생성
init: 초기화
객체 생성 과정에서 동작해야 하는 코드는 init메소드에서 재정의합니다.
문자열 변수 생성
ex) NSString *string1 = @"string1입니다.";
* << 은 객체형 타입을 의미합니다. NSString은 객체형 타입입니다.
함수 사용 방법
ex) 위에서 만든 문자열 객체 string1에 length 메소드를 호출합니다 -> [string1 length];
nil에 메소드 호출 시 무시되고, 반환값은 0 또는 nil입니다.
프로퍼티 생성 시 선언부(.h)파일 @interface 안에 생성시에는 기본적으로 인터널 타입
-@interface 밑 @property로 선언 시 외부에서 접근 가능 -> getter setter 직접 생성 안해도 자동 사용 가능 (2012년도부터 자동으로 됨 기존에는 synthesize사용 했어야함)
@property를 구현부(.m)에서 접근 시 _(언더바)가 필요하지만 @synthesize 사용으로 네이밍 싱크를 맞추어 _(언더바) 사용 안할 수 있음
@implementation Test
@synthesize name = _name;
@class
- 사용하려고하는 클래스에서만 헤더를 import, 단순히 선언만 하고 구상 클래스에서 헤더를 import를 하여 사용하려고 하는 경우에 사용
- 포인터를 참조만 할 수 있으며 클래스의 메소드들은 사용하지 못함
nonatomic
atomic과 ObjectiveC
ObjectiveC Property는 기본적으로 atomic으로 선언됩니다. 다만, atomic property는 위에서 본 것처럼 atomic 데이터가 변경 도중에 접근하지 못 하도록 lock이 걸리기 때문에 property 접근의 성능이 느려집니다. 그래서 멀티 쓰레드에서 접근될 이유가 없는 많은 ObjectiveC Property(반드시 메인스레드에서 업데이트 해야하는 View Property 같은 것들)에는 nonatomic annotation을 설정하는 것이 좋습니다.