将BOOL类型的默认值设置为YES

4

从初始化开始,BOOL类型的默认值为NO,在合成时是否可能将其值更改为YES

这样它的值就可以交替分配。


3
你的init方法不就是为了这个吗? - borrrden
#define YES (BOOL)0 :) #define NO (BOOL)1 因为默认实例填充为0。 - Buntylm
4
@BuntyMadan 请不要那样做!那会导致一个糟糕的调试过程… - Simon M
@SimonM 是的,这就是为什么它只是注释,否则就成为了被接受的答案 :) - Buntylm
5个回答

9
-(id)init{
    if ((self = [super init]))
    {
       //This is where you are supposed to initialise anythin you need

       xyz = YES;
    }
    return self;
}

1
BOOL myVar;

@property BOOL myVar;

- (void)viewDidLoad
{
 myVar=True;
}

1
你的示例创建/设置了一个名为myVar的全局变量,而不是@property - 一二三

0

你可以在viewDidLoad方法中完成它

- (void)viewDidLoad
{
    xyz = YES;
}

viewDidLoad(和viewDidUnload)可以在UIViewController的生命周期中被多次调用。这是一条危险的建议。 - grahamparks
@grahamparks,请给出一些例子来支持你所说的。我很好奇。 - rptwsthi
是的,我也想知道关于它的信息。 - Dharmbir Singh

0
尝试这个:
在 .h 文件中:
BOOL flag;

在 .m 文件中

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        flag = YES;
    }
    return self;
}

0

如果您没有编写代码,则不会有默认值。

-(void)somemethod {
  BOOL x; //no default value
  }

现在x没有默认值,将在初始化时被初始化为NO,因为实例在init时填充为0。 所以需要在初始化时进行另一种方式。例如:

-(id)init{ if ((self = [super init])) { x = YES; } }

或者在ViewDidLoad中进行一些操作 x = YES;


-somemethod 中,您的 BOOL x 不会被初始化为 NO,它将包含在调用该方法时堆栈上存在的任何垃圾数据。 - 一二三
@一二三 谢谢,但是我了解到 x 会被初始化为0。有一些重要的参考资料与此相关。 - Buntylm
只有 static 变量和实例变量的存储空间会被清零。 - 一二三

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接