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

No comments:

Post a Comment