Видимость методов в расширениях классов при завершении кода Xcodes - PullRequest
2 голосов
/ 15 августа 2011

Я видел аналогичный вопрос, касающийся различий в завершении кода между Xcode 3.2 и Xcode 4 . Мой вопрос касается специфического поведения Xcode (3.2).

Когда я объявляю "частные" методы в расширении класса, эти методы отображаются в списках завершения кода, где они не должны быть видны.

Пример (AClass.m):

#import "AClass.h"

@interface AClass()
- (void)someMethod;
@end

@implementation AClass
//...
- (void)someMethod
{
    // do something here
}
//...
@end

Когда я импортирую AClass.h в другой класс и создаю экземпляр AClass ...

AClass *test = [[AClass alloc] init];

Завершение кода Xcode показывает "приватный" метод "someMethod":

[test som     // Shows someMethod, though it shouldn't be visible here

В этот момент этот метод видим, даже если он не должен быть, потому что он здесь неизвестен - он не определен в заголовочном файле. Если я отправлю сообщение [test someMethod] в этот момент и соберу объект, я получу предупреждение, что объект может не отвечать - как ожидалось.

Это действительно отвечает, но это сбивает с толку поведение, особенно для кого-то еще, кто хочет использовать мой класс.

Это также влияет на @property / @synthesize, поскольку они "просто заменяют методы". Я хочу получить доступ ко всем моим личным иварам по свойствам: а) иметь однородный код и б) иметь возможность влиять на использование иваров (например, ленивый экземпляр). С другой стороны, все личные вещи не должны быть видны (при завершении кода) всем, кто использует мои классы, чтобы их было проще использовать.

Есть ли способ изменить это поведение?

Является ли отсутствующая проверка контекста в Xcode 3.2 причиной, почему завершение кода показывает такие методы, где они не должны быть видны?

Это поведение отличается в Xcode 4 (из-за проверки контекста)?

Я все еще использую Xcode 3.2, потому что я хотел закончить проект, прежде чем переключиться и адаптироваться к Xcode 4.

...