Экземпляр переменные автоматически обнуляются в Objective-C.
Ваш код печатает 8
, поскольку вы объявили переменную как NSUInteger *
- указатель (*
) к NSUInteger
. Теперь на 64-битной платформе NSUInteger
имеет длину 8 байт.
(Objective-) C определяет оператор ++
для указателя , увеличивая его на размер любоговведите это указывает на. Таким образом, numOfMethodCalls
был инициализирован на 0
автоматически, а затем ++
добавил к нему 8
.
Переменные экземпляра лучше всего закрывать, как вы заявляете, но вы объявили об этом публично в@interface
. Лучший способ - объявить это в реализации:
@implementation UIEnhancements
{
NSUInteger numOfMethodCalls;
}
...
@end
Наконец, хотя вы не показываете реализацию, вы объявляете:
+(id) initSelf;
в вашем интерфейсе. Только методы, которые являются методами инициализации, должны начинаться с init
, они являются экземплярами методами, и в современном Objective-C обычно объявляются как возвращающие instancetype
(а не id
), что улучшает время компиляциипроверки типа. В итоге:
- (instancetype) initSelf;
хотя, если это ваш единственный метод инициализации, вы должны назвать его просто init
.
HTH