2010-10-03 2 views
1

У меня есть несколько переменных в моем iPhone приложении как экземпляр класса переменные (которые они должны быть, потому что они используются в нескольких методов этого классаЧастного переменного экземпляра -. IPhone SDK

Однако, я не хочу они должны быть выставлены на родительский класс. Я видел @private ключевое слово, но я не уверен, если это целесообразно использовать или нет.

ли кто-нибудь, как сохранить переменные экземпляра в качестве частного к классу?

Это, вероятно, вопрос Objective-C, а также не обязательно специфический для iphone.

Большое спасибо, Brett

+0

переменные экземпляра никогда не «подвергаются воздействию родительского класса» – user102008

ответ

1

@private делает ваше намерение ясно и путь.

Edit:

@interface YourClass : NSObject { 
@private 
    int privateData; 
@public 
    int publicData; 
} 

// method declarations.... 

@end 
+0

Я не смог выяснить, как реализовать @private. Есть идеи? Где я помещаю его для набора переменных? Как я отделил их от тех, кого хотел бы обнародовать? Большое спасибо! – Brett

+0

Отредактировано с примером. – Eiko

+0

Может ли это работать и с методами класса? То есть. @private - (void) method1; – Brett

0

@private директива означает, что переменная экземпляра доступен только внутри класса, объявляющего его. Если вы хотите, чтобы подкласс имел доступ к переменным экземпляра, используйте директиву @protected. Я не совсем уверен, что вы имеете в виду, когда говорите, что не хотите, чтобы ваши переменные экземпляра подвергались классу родителей, но я уверен, что @private - это то, что вы хотите.

Вы можете использовать директивы, как это:

@interface MyClass : NSObject { 
@private 
    float privateFloat; 
    float anotherPrivateFloat; 
@protected 
    float protectedFloat; 
@public 
    float publicFloat; 
} 

область видимости по умолчанию для переменных экземпляра защищена.

+0

Отлично! Всем спасибо! – Brett

+0

Как насчет методов? Есть ли способ сохранить их конфиденциальность с помощью директивы @private? – Brett

+0

Не то, чтобы я знал. Вы можете скрыть объявления методов, используя категорию с пустым именем, чтобы объявить «частный API», но, насколько я знаю, конфиденциальность не применяется. Вот почему вы слышите о том, что iPhone-приложения отвергаются для «частных» методов Apple. Посмотрите на этот вопрос: http://stackoverflow.com/questions/172598/best-way-to-define-private-methods-for-a-class-in-objective-c –

0

Переменные экземпляра экземпляра класса (предполагая, что вы имеете в виду переменную, которая может быть установлена ​​в одном объекте и считана в другом объекте того же класса) в Objective C, являются такими же, как статические глобальные переменные в простом ANSI C (при условии, что вы ставите один класс осуществление внутри один .m файл).

Статические глобалы не будут подвергаться воздействию каких-либо других классов (супер, суб, чужого и т. Д.) Или кода вне файла реализации, содержащего эти переменные экземпляра класса.

Заявление о неприкосновенности @private в других ответах здесь, скорее всего, неверно (в зависимости от того, что вы подразумеваете под терминологией), поскольку эти переменные экземпляра не будут обладать классом, но являются частными для каждого отдельного объекта (кроме выставленный собственностью).

+0

Бретт спросил о переменной, которую он может использовать в несколько методов - не разделяться между несколькими экземплярами. Кроме того, в Obj-C нет действительно «переменной класса» (по крайней мере, они не равны по сравнению с методами класса). – Eiko

Смежные вопросы