Nos*_*tap 16 xcode boolean objective-c ios
我需要创建一个类型的实例变量,BOOL其中一个FalseObjective-C类的默认值为.我该怎么做呢?我见过人们在他们的.h文件中定义它但我真的不需要这个变量是公开的.因此,我不应该把它放在我的.m文件中?另外,我应该把它作为财产吗?或者我不应该做一些财产?谢谢.
Jer*_*myP 23
我需要在我的一个目标c类中创建一个BOOL类型的实例变量,其默认值为FALSE.我该怎么做呢?
假设您正在使用当前的Xcode,您可以在实现中声明ivar,如下所示:
@implementation MyClass
{
@private
BOOL myBool;
}
Run Code Online (Sandbox Code Playgroud)
我见过人们在他们的.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
Run Code Online (Sandbox Code Playgroud)
请注意,虽然编译器会为上面的内容生成警告,但在运行时,任何类都可以发送setMyBool:或myBool发送对象MyClass.
gra*_*ver 13
如果你想创建一个私有变量,你可以使用类别的力量.以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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
48967 次 |
| 最近记录: |