@implementation
블록 에서 개인 메소드를 정의하는 것이 대부분의 목적에 이상적입니다. Clang은 @implementation
선언 순서에 관계 없이을 (를) 볼 수 있습니다 . 클래스 연속 (일명 클래스 확장) 또는 명명 된 범주에서 선언 할 필요는 없습니다.
경우에 따라 클래스 연속에서 메소드를 선언해야합니다 (예 : 클래스 연속과와 사이의 선택기를 사용하는 경우 @implementation
).
static
기능은 특히 민감하거나 속도가 중요한 개인 방법에 매우 좋습니다.
접두사 이름 지정 규칙은 실수로 개인 메소드를 대체하지 않도록 도와줍니다 (클래스 이름을 접두어 안전으로 간주합니다).
명명 된 카테고리 (예 :) @interface MONObject (PrivateStuff)
는로드시 잠재적 인 이름 충돌로 인해 특히 좋은 아이디어가 아닙니다. 친구 나 보호 방법에만 유용합니다 (아주 좋은 선택은 아닙니다). 불완전한 범주 구현에 대해 경고하려면 실제로 구현해야합니다.
@implementation MONObject (PrivateStuff)
...HERE...
@end
여기 주석이 달린 치트 시트가 있습니다 :
MONObject.h
@interface MONObject : NSObject
// public declaration required for clients' visibility/use.
@property (nonatomic, assign, readwrite) bool publicBool;
// public declaration required for clients' visibility/use.
- (void)publicMethod;
@end
MONObject.m
@interface MONObject ()
@property (nonatomic, assign, readwrite) bool privateBool;
// you can use a convention where the class name prefix is reserved
// for private methods this can reduce accidental overriding:
- (void)MONObject_privateMethod;
@end
// The potentially good thing about functions is that they are truly
// inaccessible; They may not be overridden, accidentally used,
// looked up via the objc runtime, and will often be eliminated from
// backtraces. Unlike methods, they can also be inlined. If unused
// (e.g. diagnostic omitted in release) or every use is inlined,
// they may be removed from the binary:
static void PrivateMethod(MONObject * pObject) {
pObject.privateBool = true;
}
@implementation MONObject
{
bool anIvar;
}
static void AnotherPrivateMethod(MONObject * pObject) {
if (0 == pObject) {
assert(0 && "invalid parameter");
return;
}
// if declared in the @implementation scope, you *could* access the
// private ivars directly (although you should rarely do this):
pObject->anIvar = true;
}
- (void)publicMethod
{
// declared below -- but clang can see its declaration in this
// translation:
[self privateMethod];
}
// no declaration required.
- (void)privateMethod
{
}
- (void)MONObject_privateMethod
{
}
@end
분명하지 않은 또 다른 접근법 : C ++ 유형은 매우 빠르며 훨씬 높은 수준의 제어를 제공하면서 내보내고로드 된 objc 메소드의 수를 최소화합니다.