티스토리 뷰

반응형

[문씨의 강좌] 메모리 관리2 <Property>

http://cafe.naver.com/mcbugi/71571


[TIP] retain 프로퍼티 변수사용시 self 사용 주의 - 메모리릭

http://cafe.naver.com/mcbugi/56420


nonatomic을 쓰는이유

http://cafe.naver.com/mcbugi/102093


nonatomic을 쓰는이유 결론 : property 선언시 명시적으로 atomic으로 설정되게 된다. atomic으로 설정될경우 해당 property를 접근할 때마다 lock과 unlock를 반복하게 되므로 성능저하를 가져올 수 있다. 하지만 멀티쓰레드 환경에서 해당 property를 보호하기 위해 atomic으로 사용하는게 좋다. 하지만 대부분은 멀티쓰레드를 사용하지 않기에 nonatomic을 사용하는게 효율적이니 꼭 property 선언시 nonatomic을 사용해 주자!!.


총 정리 : property는 결론적으로 getter/setter를 편리하게 사용할 수 있도록  해주는 기능이다.

주로 사용할 때에는 nonatomic을 사용하며, NSString은 copy, Class객채는 retain, 일반 int, float, BOOL같은 값들은 assign으로 사용한다. 되도록 문법은 @synthesize obj = _obj; 처럼 내부에서 사용할 때와 외부에서 접근할 때를 생각해 내부 변수에 '_'덧 붙여 생성해 주는게 가독성 면에서 좋다. 선언하지 않을경우 systhesize가 자동으로 내부에 전역변수를 생성해 준다.

property는 선언을 알리는 역할을 할 뿐 synthesize를 하지 않을 경우에는 사용자가 직접 setter/getter를 정의 해야만 접근할 수 있다. synthesize는 자동으로 내부에 전역변수, getter함수, readonly설정이 되어 있지 않다면 setter함수등을 자동으로 생성해 주는 역할을 하며 사용자가 직접 작성하여 사용할 수 있다. (예로 하나의 객체에 상황에 따라 값을 달리 반환시켜 줄 때에는 getter함수에 조건을 달아주는 식으로 말이다.)

property를 사용하면서 가장 애매한 부분이 선언할 때와 해제할 때 인데 위의 링크들을 천천히 보면 이해가 갈 것이다.

선언을 할 때에는 먼저 지역변수로 생성하고 self. 객채에 할당해 주는 방법(1)과 self.를 선언하지 않고 바로 할당해 주는 방법(2)이 있는데 경우에 따라 둘중 한가지를 쓰게 된다. 객채를 release 처리 할때에는 방법(1) 보다는 주로 방법(2)를 선호하게 된더라

//값 할당할 때

(1) tempPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:&error];
      self.soundPlayer = tempPlayer;
     [tempPlayer release];

(2) testStr = [[NSString allic] initWithFormat:@"TEST %i", 10];

//해지할 때

(1) self.testStr = nil;

(2) [_testStr release];     _testStr = nil;




반응형

'iOS > 자료정리' 카테고리의 다른 글

[iPhone]UIImageView  (0) 2012.05.10
[iPhone]CADisplayLink  (0) 2012.05.09
[iPhone]NSTimer 사용하기.  (0) 2011.11.25
[iOS]앱에서 다른앱 실행하기.  (0) 2011.10.27
[iPhone]NSNumberFormatter  (0) 2011.08.17
댓글
반응형