初始化Objective-C上的实例变量

初始化Objective-C上的实例变量,objective-c,iphone-sdk-3.0,Objective C,Iphone Sdk 3.0,我正在开发iPhone3.1.3应用程序和 我有以下头文件: #import <UIKit/UIKit.h> @interface VoiceTest01ViewController : UIViewController { IBOutlet UITextView *volumeTextView; BOOL isListening; NSTimer *soundTimer; } @property (nonatomic, retain) IBOutlet

我正在开发iPhone3.1.3应用程序和 我有以下头文件:

#import <UIKit/UIKit.h>

@interface VoiceTest01ViewController : UIViewController {
    IBOutlet UITextView *volumeTextView;
    BOOL isListening;
    NSTimer *soundTimer;
}

@property (nonatomic, retain) IBOutlet UITextView *volumeTextView;
@property (nonatomic, retain) NSTimer *soundTimer;

- (IBAction)btnStartClicked:(id)sender;

@end

如何在开始时将isListening设置为false?

在viewDidLoad中设置布尔值

- (void)viewDidLoad {
  isListening = NO;
  //Something
}

默认情况下,所有实例变量都设置为0/NULL/nil,这在
BOOL
的情况下表示
NO
。因此,默认情况下,它已经是
NO
(或false)


如果您需要任何其他值,那么您需要在大多数情况下覆盖指定的初始值设定项
init
,并在那里设置默认值。

布尔字段的默认值为False,但最好在“viewDidLoad”中将其设置为@buildSuccessed sugest

问候语1)
init
是一个好地方,如下所示,但是如果您使用故事板,则不会调用此
init
方法

- (id) init {
    self = [super init];
    if (self) {
        isListening = NO;
    }
    return self;
}
(二)
initWithCoder
是编写代码的好地方如果您使用的是storyboard当然您的sdk是3.0,我相信当时还没有storyboard,但以防有人需要它:

- (id) initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if (self) {
        isListening = NO;
    }
    return self;
}
3) 如果您的viewcontroller将从nib文件初始化:

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

Yea-@VansFannel,请务必查看UIViewController文档,了解为什么这种类型的类会出现这种情况。:)这太蹩脚了——不是你的答案,@iPrabu,这是正确的,而是objective-c语言不允许你为实例变量指定初始值设定项。事实上,你必须以特定于操作系统和应用程序的方式来做这件事,这是令人伤心的(或者像@DarkDust所说的那样覆盖指定的初始值设定项,但是仅仅添加一个简单的
=1
)就更痛苦了。
- (id) initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
         isListening = NO;
    }
}