我需要在我的Objective-C类之一的False
默认值创建BOOL
类型的实例变量。我该怎么做呢?我已经看到人们在他们的.h文件中定义它,但我并不需要这个变量是公开的。因此,我不应该把它放在我的.m文件中?另外,我应该让它成为一个物业吗?或者我应该永远不要制造某种财产?谢谢。如何在目标c中创建一个BOOL实例变量?
回答
我需要在我的一个目标c类中创建一个类型为BOOL的实例变量,其默认值为FALSE。我该怎么做呢?
@implementation MyClass { @private BOOL myBool; }
我见过的人把它定义在他们的.h文件,但我不”:
假设你正在使用当前的Xcode,你可以在这样的实施申报伊娃真的需要这个变量是公开的。
从历史上看,由于类的实现方式,您必须在@interface
中声明实例变量。现在只有当您的目标是32位OS X时才有必要。
此外,我应该让它成为一个属性吗?
这取决于。如果它是你的类的外部API的一部分(对于不相关的类或子类可以使用,那么你应该明确地将它作为属性)如果它只是对象内部状态的一部分,则不需要将它作为属性(并且我不' T)。
或者我应该永远不会让什么属性?谢谢。
如果你不使用ARC和类型为对象类型(BOOL是不是),你应该总是使它如果你使用ARC,你的是,Apple开发人员列表中的建议是制作属于API属性的内容以及作为ivars的内部状态。
请注意,即使对于内部状态,您可能也想使用KVO,在这种情况下,请使用属性。
如果将此BOOL声明为属性并合成它,则不需要显式声明伊娃。如果你想使财产“可见”只类本身,使用类扩展
@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
的对象。
如果你使它成为一个财产,它是公开的。如果你不想让变量公开,那么不要使用属性。你为什么不想公开?您可以拥有只读属性,并通过私有类别在您的.m中进行写入。
你可以把它放到你的.m文件,如果使用的iOS 5
@implementation MyClass {
BOOL _myBool;
}
我觉得这是一个新的iOS5。但我也看过这样的代码:
@implementation MyClass {
@private
BOOL _myBool;
}
希望这会有所帮助。
如果你想制作一个私有变量,你可以使用类别的力量。 作出榜样,在.m文件类MyClass的执行以下操作:
#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
你可以把声明中.m
文件。
无论你制作一个属性,取决于你想要的。 作为一个财产,你可以在以后申请包括检查/守卫/任何的setter/getter。 另外,您可以应用键值访问。
如果你不需要其中的一个,那么就不需要一个属性(但是一个好传统:你永远不知道,你的代码将如何演化)。
我使用0,1代替YES,NO
#define YES 1
#define NO 0
- 1. 如何在目标C中使用静态变量(BOOL)C
- 2. 创建变量C++的多个实例
- 3. 在目标中全局变量实例变量c
- 4. C#创建一个实例
- 5. 目标C:方法和实例变量
- 6. 目标C类别的实例变量
- 7. 在Ruby中创建实例变量
- 8. 如何在C++中创建一个类的多个实例
- 9. 如何在C++中实例化一个成员变量中的子类实例?
- 10. 如何在Objective C中声明一个实例变量?
- 11. 如何在C++中只实例化一个变量?
- 12. 如何加载DLL并在C#中创建一个新实例?
- 13. 如何在C++中只创建一个实例的类
- 14. 实例的范围目标C中的变量C
- 15. 如何在PHP中从多个变量创建一个变量?
- 16. 如何在Objective C中创建一个变量单个赋值变量
- 17. 如何拒绝在Ruby中创建实例变量
- 18. 如何在变量中保存“创建片段的新实例”?
- 19. 如何在Matlab中创建高效的实例变量mutators?
- 20. 如何在JavaScript中创建实例变量?
- 21. 在运行时创建实例变量?
- 22. 实例变量VS在创建方法
- 23. 如何在目标c中定义一个全局变量?
- 24. 如何在另一个变量内创建一个变量?
- 25. 如何在C#中创建一个全局变量?
- 26. 如何在C#中创建一个变量来保存日期?
- 27. 如何在控制器中创建实例变量并在视图中使用实例变量?
- 28. 如何在目标C中创建PKCS12
- 29. 多个实例目标c
- 30. 如何在目标中创建一个协议-C
尝试:' - (无效)viewDidLoad中{ BOOL标志= NO; ''。另外,一旦你想声明.m文件,你不能从.m文件中进行属性合成。 –
我应该在哪里定义'flag'?在.m文件中没有意义吗?但是,我无法弄清楚它的语法。 Thx – Nosrettap
在.h类中定义属性,就像在.h中所做的那样。它将使该类对于不能从外部访问的类非常私密。 – iphonic