Подтвердить что ты не робот

Как создать переменную экземпляра BOOL в объекте c?

Мне нужно создать переменную экземпляра типа BOOL со значением по умолчанию False в одном из моих классов Objective-C. Как мне это сделать? Я видел, как люди определяли его в своем .h файле, но мне не нужна эта переменная для публики. Таким образом, я не должен помещать его в мой .m файл? Кроме того, должен ли я сделать его собственностью? Или я никогда не должен делать что-то своею? Спасибо.

4b9b3361

Ответ 1

Мне нужно создать переменную экземпляра типа BOOL со значением по умолчанию FALSE в одном из моих объектных классов c. Как это сделать?

Предполагая, что вы используете текущий Xcode, вы можете объявить ivar в реализации следующим образом:

@implementation MyClass
{
@private
    BOOL myBool;
}

Я видел, как люди определяли его в своем .h файле, но мне не нужна эта переменная для публики.

Исторически вам приходилось объявлять переменные экземпляра в @interface из-за того, как были реализованы классы. Теперь это необходимо, только если вы нацеливаете 32-разрядную ОС X.

Кроме того, должен ли я сделать это свойством?

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

Или я никогда не должен делать что-то своеобразным? Спасибо.

Если вы не используете ARC, а тип - тип объекта (BOOL - нет), вы всегда должны использовать его для использования управления памятью синтезированных аксессуаров. Если вы используете ARC, совет в списке разработчиков Apple должен сделать материал, который является частью свойств API и того, что является внутренним состоянием как ivars.

Обратите внимание, что даже для внутреннего состояния вы можете использовать KVO, и в этом случае используйте свойство.

Если вы объявляете этот BOOL как свойство и синтезируете его, вам не нужно явно объявлять ivar. Если вы хотите сделать свойство "видимым" только для самого класса, используйте расширение класса

@interface MyClass()

@property (assign) BOOL myBool;

@end

@implementation MyClass

@synthesize myBool = myBool_;  // creates an ivar myBool_ to back the property myBool.

@end

Обратите внимание, что хотя компилятор выдаст предупреждения для вышеперечисленного, во время выполнения любой класс может отправить setMyBool: или myBool в объекты MyClass.

Ответ 2

Если вы хотите сделать приватную переменную, вы можете использовать силу категорий. Создайте класс MyClass, например, и в файле .m выполните следующие действия:

#import "MyClass.h"

@interface MyClass() //This is an empty category on MyClass class

@property (nonatomic, assign) BOOL myBool;

@end


@implementation MyClass

@synthesize myBool = _myBool;

-(void)myMethod {
   self.myBool = YES; //this is using the property
   _myBool = NO; //this is the instance variable, as @synthesize creates an instance variable for you
   // both are private
}

@end

Ответ 3

BOOL объявляются как iVars с простым BOOL myBool и как свойство с @property (nonatomic, assign) BOOL myBool. Обратите внимание, что значения BOOLean инициализируются NO (ноль). Если вам нужен BOOL для доступа к другим классам или "глобальным" в файле m, используйте iVar или свойство, иначе просто объявите их в виде облачных областей в отдельном методе.

Ответ 4

Вы можете поместить объявление в файл .m.

Независимо от того, создаете ли вы свойство, это зависит от того, что вы хотите. В качестве свойства вы можете позже применить setter/getter, которые включают проверку/охрану/что угодно. Кроме того, вы можете применить ключ-значение-доступ.

Если вам не нужен один из них, нет никакой реальной потребности в свойстве (но хорошая традиция: вы никогда не знаете, как будет развиваться ваш код).

Ответ 5

Если вы сделаете это свойством, оно будет общедоступным. Если вы не хотите, чтобы переменная была общедоступной, не используйте свойство. Почему вы не хотите быть публичным? Вы можете иметь свойство readonly и сделать запись в вас .m через частную категорию.

Вы можете поместить его в свой .m файл, если используете iOS 5

@implementation MyClass {
     BOOL _myBool;
}

Я думаю, что это ново для iOS5. Но я тоже видел такой код:

@implementation MyClass {
@private
     BOOL _myBool;
}

Надеюсь, это поможет.

Ответ 6

i используйте 0, 1 вместо YES, NO

#define YES 1
#define NO 0