수동으로 메모리 관리를 했는데
그래도 알고 넘어 가자
Objective-C 의 수동 메모리 관리 관련 메서드
retainCount : 객체 혹은 인스턴스의 변수가 특정 메모리 공간을 참조 하고 있는가를 나타내는 정수
alloc : 생성된 객체에 메모리 공간을 할장한다.
retain : 객체가 메모리 공간을 참조 하고 있다는 사실을 iOS에 알린다. reationCount를 1증가 시킨다.
release : retainCount 1감소 시킨다.
dealloc : 메모리 공간을 참조하고 있는 모든 객체가 더는 해당 메모리 공간을 사용하지 말라는 명령을 내린다. retainCount = 0
retainCount 값이 1또는 그이상이면 iOS는 메모리 공간을 소유하고 사용할수 있다.
retainCount 값이 0이 될경우 공간에 대한 소유권을 반환받아 할당되었던 메모리 공간을 회수 한다.
약한 참조 (weak reference)
Foo * myFooOne = [[Foo alloc[ initWithName:@"James"];
Foo * myFooTwo = myFooOne //<--- 약한 참조
[myFooOne release];
//myFooTwo 사용시 런타임 에러 발생
Foo * myFooOne = [[Foo alloc[ initWithName:@"James"];
Foo * myFooTwo = myFooOne //<--- 약한 참조
[myFooTwo retain]; //<-- 해주어야
[myFooOne release];
//myFooTwo 이용가능
자동 메모리 관리 ARC
ARC는 Automatic Reference Counting의 약자로 기존에 수동(MRC라고 함)으로 개발자가 직접 retain/release를 통해 reference counting을 관리해야 하는 부분을 자동으로 해준다.
1. retain/release/autorelease 키워드 사용금지
2. C 구조체 내에 Object 타입 사용 금지
3. Core Foundation은 Objective-C의 Object 타입이 아니므로 Core Foundation 과 Object 간의 명시적인 타입 캐스팅이 필요 하다.
프로퍼티 속성
strong --> retain 과 거의 같다.
weak 는 assign 키워드 처럼 retainCount를 증가 시키지 않는다.
assign과는 다르게 참조하는 객체가 해제(deallocated)되면 weak로 선언된 프로퍼티는 자동으로 nil이 대입된다
ARC가 없던시절
reain --> strong
assing --> weak
라고 이해 하면
weak가 assign과 차이점이라면
음 assign은 int float 등등 primitive타입에 사용하는 것이고 weak는 객체에 사용한다고 생각하면
될듯 하다.
그래도 역시 ARC보단 ARC off가 편할듯 하다.
댓글 없음:
댓글 쓰기