Showing posts with label Objective-C. Show all posts
Showing posts with label Objective-C. Show all posts

Tuesday, April 24, 2012

Objective-C 클래스에 private method 넣는 법

질문 : Objective-C의 class에 private 메소드 넣는 법
답 :

헤더
 @interface MyLayer : CCLayer   
 {  
 }  

소스
 @interface MyLayer (PrivateMethods)  
      -(void) addRandomThings;  
 @end  
 -(void) addRandomThings  
 {  
      // Do Something  
 }  

Sunday, April 22, 2012

Objective-C의 switch 사용시 각 case 를 {} 블록으로 묶기

Objective-C 의 switch 문 사용시 각 case 를 {} 블록으로 묶는 습관 들이기
안묶으면 에러가 나는 경우가 빈발
키워드 : block, error

Saturday, April 21, 2012

Objective C 에서 멤버값 세팅할때 주의점

다음과 같이 정의되었다고 하자.
// 헤더
aClass
{
    anotherClass  _aMember;
}
@property (nonatomic, retain) * aMember;
// 소스
@synthesize aMember = _aMember;
------------------------------
이 경우
self.aMember = val; 와
_aMember = val; 는 다르다.
전자는 레퍼런스 카운터를 하나 올려주는 반면
후자는 단지 값만 세팅해주기 때문.

Sunday, April 15, 2012

Objective-C 의 @property 에서 atomic 과 nonatomic

설명 :
어떤 클래스의 멤버로 addressBook 이라는 것이 있을 때 이를 nonatomic 으로 한다고 하자.
쓰레드 A 가 addressBook 를 읽고 그와 동시에
쓰레드 B 가 addressBook 에 쓴다고 할때
atomic 이 아니라면 A 가 얻어내는 정보는 제대로 된 것이 아닐 수 있다.

이를테면 addressBook 가 멤버로 name, address, phoneNumber 를 가질 경우
각각이 어긋난 정보가 될 수 있다는 것. 따라서 atomic 으로 하면 이를 막을 수 있게 된다.

주의점 :
atomic 는 thread safe 를 보장해주지는 않는다고 말하는데 그 의미를 설명해보자.
클래스 멤버가 firstName, lastName 이라는 스트링 멤버가 있을 때 각각이 atomic 이라고 하자.
쓰레드 A 가 firstName 과 lastName 을 get 하고 그와 동시에
쓰레드 B 가 firstName 과 lastName 을 set 할 때
쓰레드 A 가 얻어내는 것은 성과 이름이 어긋난 잘못된 정보가 될 수 있다. 즉
thread safe 하게 짜려면 firstName 과 lastName 각각을 atomic 으로 만드는 것은 물론이고
추가로 firstName 과 lastName 을 함께 set / get 하는 것을 atomic 하게 하는 방법을
사용해야 한다는 것이다.

레퍼런스 : Atomic vs nonatomic properties
키워드 : @synthesize, string

Objective-C 의 @property 에서 assign, retain, copy 의 차이

질문 : @property 에서 assign, retain, copy 의 차이
답 :
  1. assign 은 그냥 값만 set / get 하는 것
  2. retain 은 set / get 할때 retain count 를 올려주고 내려주는 것
  3. copy 는 set / get 할때 pointer 가 아닌 value 를 주고받는 것
    (단, 변하지 않는 값의 경우 copy 가 아닌 원래 값을 돌려줌)
쉽게 말해 int나 float같은 그냥 value의 경우는 assign이 적합하고
일반적인 클래스의 경우 retain 이 적합
값의 copy가 필요한 특수한 경우에 한해서는 copy 사용(예: NSMutableString 변수를 변화시켜가다가 그걸로 NSString 인 멤버를 set 하는 경우 등)

레퍼런스 : Assign, retain, copy: pitfalls in Obj-C property accessors
키워드 : @synthesize