我需要在我的一个 Objective-C 类中创建一个类型BOOL
为默认值的实例变量。False
我该怎么做呢?我见过人们在他们的 .h 文件中定义它,但我并不真的需要公开这个变量。因此我不应该把它放在我的 .m 文件中吗?此外,我应该将其设为财产吗?或者我不应该让某物成为财产?谢谢。
5 回答
我需要在我的一个目标 c 类中创建一个默认值为 FALSE 的 BOOL 类型的实例变量。我该怎么做呢?
假设您使用的是当前 Xcode,您可以在实现中声明 ivar,如下所示:
@implementation MyClass
{
@private
BOOL myBool;
}
我见过人们在他们的 .h 文件中定义它,但我并不真的需要公开这个变量。
@interface
从历史上看,由于类的实现方式,您必须在 中声明实例变量。现在仅当您针对 32 位 OS X 时才需要这样做。
此外,我应该将其设为财产吗?
那要看。如果它是类的外部 API 的一部分(供不相关的类或子类使用。如果它只是对象内部状态的一部分,则不需要将其设为属性(我不需要) t)。
或者我不应该让某物成为财产?谢谢。
如果您不使用 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
.
如果你想创建一个私有变量,你可以使用类别的力量。例如,创建一个 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
BOOL 被声明为带有简单 的 iVar BOOL myBool
,并被声明为带有@property (nonatomic, assign) BOOL myBool
. 但请注意,布尔值初始化为 NO (nil)。如果您需要从其他类访问 BOOL 或 m 文件中的“全局”,请使用 iVar 或属性,否则只需在单个方法中将它们声明为作用域变量。
您可以将声明放入.m
文件中。
您是否从中获得财产,取决于您想要什么。作为属性,您可以稍后应用包括检查/守卫/任何内容的 setter/getter。此外,您可以应用键值访问。
如果您不需要其中之一,那么就没有真正需要属性(但一个好的传统:您永远不知道您的代码将如何发展)。
如果您将其设为财产,则它是公开的。如果您不希望变量公开,则不要使用属性。为什么不想公开?您可以拥有 readonly 属性并通过私有类别在您的 .m 中写入。
如果你使用 iOS 5,你可以把它放在你的 .m 文件中
@implementation MyClass {
BOOL _myBool;
}
我认为这对 iOS5 来说是新的。但我也见过这样的代码:
@implementation MyClass {
@private
BOOL _myBool;
}
希望这可以帮助。