본문 바로가기

프로그래밍/iOS

NSAutoreleasePool VS @autorelease block

  1. NSAutoreleasePool
    - MRC에서 사용하는 autorelease 메시지를 받은 객체들을 모아두는 풀
    - 풀이 메모리에서 해제(drain, release)될 때 풀에 포함된 모든 객체들은 release 메시지를 받음
    풀은 release 메시지를 한번만 보내기 때문에, retain count가 2인 객체는 살아있음
    - 기존 풀에 새로운 풀 생성
       1) 
    기존 풀에 새로운 풀을 생성 할 경우 기존 풀 스택의 맨 위에 추가
    2) 이후 어떤 객체가 autorelease 메시지를 받게 된다면, 그 객체는 최 상단에 포함된 풀에 추가

    - drain VS release
     1) Gargage Collection을 지원하지 않는 경우(iOS) drain은 release와 같음
     2) Gargage Collection을 지원 할 경우 drain은 pool의 모든 객체 release, 필요에 따라 시스템에서 pool 수거
  2. @autorelease block - ARC에서 NSAutoreleasePool을 대체하기 위해 생김(ARC, MRC 모두 사용 가능)


'프로그래밍 > iOS' 카테고리의 다른 글

Run Loop  (0) 2017.04.12
NSHashTable  (0) 2017.04.11
iOS 식별자(identifier)  (2) 2017.04.07
NSURL의 속성  (0) 2017.04.07
nil, Nil, null, NSNull의 차이  (0) 2017.04.06