NSObject에 아래 함수 가지고 있음
- (BOOL)respondsToSelector:(SEL)aSelector; // aSelector 메서드 존재 시 YES return
// delegate가 메서드를 구현했는지 확인
if([delegate respondsToSelector:@selector(tableView:shouldSelectRow:)]) {
// 메서드 실행
ok = [delegate tableView:self shouldSelectRow:rowIndex];
}
Retain Count - 객체의 참조수를 관리하여 alloc시 참조수 1 증가, 0이 되면 객체 메모리 해제 - retain, release 메시지 사용
Mac OS X 10.5 : Garbage collector - 프로그램 실행 중 동적으로 감시하고, 해당 영역에 있는 변수에서 접근 할 수 없는 객체 찾고 자동으로 메모리 해제 - 실행 타임에서 메모리 관리 - 문제점: 쓰레기 객체 탐색을 위해 CPU 소비 필요
Mac OS 10.7 : ARC - 코드를 컴파일 할 때 참조수를 컴파일러가 증가, 감소 관리
Strong Reference Cycle
두인스턴스가 서로강한(strong) 참조를하여메모리에서사라지지않는경우…
ARC는 Reference Cycle에자동적으로대응불가
‘weak’을이용하여방지
custom delegate를 weak로 attribute 하는이유
Retain Count
참조 종류 - Strong Reference: 객체가 다른 객체를 retain 하는 것. 기본 설정 - Weak Reference : retain하지 않는 것. 단순 포인터 대입 (참조 순환 피하기 위해) : Zeroing Weak Reference: ARC에서 약한 참조의 객체가 메모리 해제할 때 nil로 설정하여 메모리 crush 예방
dealloc - 참조 수가 1인 객체에 release 보내면 호출됨 - 마지막에 [super dealloc];
NSAutoreleasePool - 객체에 autorelease 메시지 -> Autorelase pool에 객체 추가 (가비지 컬렉터를 사용하지 않을 때) - Cocoa application: 모든 이벤트를 제어하기 전에 생성, 제어 후 해제 - 오토릴리즈 객체를 리턴하는 클래스 메서드들이 있음. ex) [NSString stringWithFormat: ….] - Release 시점: 보통 현재 이벤트 루프가 끝날 때
Retain - alloc, new, copy가 포함된 이름을 가진 메서드 (copy, mutableCopy ...) => 참조수 + 1 (atorelease pool x) - release 해야할 의무가 있음
Release - 소유를 원하지 않을 경우 release or autorelease - 0일 때 dealloc
접근자 메서드 - 다른 객체들이 인스턴스 변수를 접근하기 위해 사용 - getter, setter