Private messages with Objective-C

Objective-C supports access privilege for objects like C++ does.
@private, @protected, and @public are those.
However, it is very easy to forget that they only control properties.
Umm.. After the Objective-C 2.0, it is confusing to call member variables of classes as properties due to its dedicated “property” keyword.
Anyway, then how to declare a private message? There are two ways.

The first one is quite simple. A message defined in its @implementation @end block without being declared in @interface @end block is private.
One drawback is that readability is not good. Thanks to the Xcode’s function list, you can put #pragma mark statement. So, you can organize private messages visible way.

The second one is to use category.
In an implementation file of a class MyObject, you can make a category for the MyObject class like this.

#import "MyObject.h"

@interface MyObject (Private) // Any category name can do

- (void)privateMessageOne;
- (int)privateMessageTwo;

@implementation MyObject (Private)
- (void)privateMessageOne


- (int)privateMessageTwo


@implementation MyObject

// Usual message definition

Good side of this approach is that it is very apparent that they are private. Also, they are really private. The first approach doesn’t make them really private. If someone knows that there are some hidden messages, they can call it. But with this second approach, it’s not.

Which approach do you prefer?


3 responses to this post.

  1. 저는 두번째 방법을 선호합니다만, 귀찮아서 그냥 첫번째 방법을 사용하기도 합니다.

    어떻게 하든 간에 Objective-C에는 C++과 같은 진짜 private method란 없습니다. 즉, interface가 노출되어 있지 않을 뿐이지 호출하는 건 아무 문제없습니다.
    Smalltalk의 경우는 attribute는 private, method는 public 이렇게 정해져있습니다. 그래서 Smalltalk에서도 그냥 Private이라는 이름의 카테고리를 만들어 모아놓고 그냥 Private이니까 호출하지 마세요하는 식입니다.


  2. Posted by jongampark on November 3, 2008 at 8:46 AM

    에고.. 제가 확인을 안해보고 했네요.
    그래서 제 포스트 중 해당 부분을 쫙 그었습니다. :)

    Xcode 에디터를 이용하지 않는 사람들 혹은 익숙하지 않은 사람들을 위해서, 그룹 프로젝트를 할때는, Category로 하는 게 명확해서 좋을 거 같긴 합니다만, 최근까지는 저는 첫번째 방법을 써왔습니다. 주말에 회사에서 일할 것을 파악하기 위해서 하다가, 카테고리로 해볼까 해서 해봤는데, 괜찮은거 같더라구요.

    그나저나 이제 좀 쉬고 싶은데, 프로젝트는 쏟아지고… 힘드네요.
    어떻게 지내세요?


  3. 저는 maccrazy님 덕분에 잘~ 지내고 있습니다만…
    새로운 환경과 업무에 적응하느라 정신이 없습니다.
    이러면 안 되는데 벌써부터 능력의 한계를 느끼고 있습니다. 흐..


Leave a Reply

Please log in using one of these methods to post your comment: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: