在iOS 5上使用ARC发布的对象太快了?

时间:2012-04-04 05:27:47

标签: iphone ios automatic-ref-counting

我创建了一个包含布尔值的AppSettings类:

#import <Foundation/Foundation.h>

@interface AppSettings : NSObject{

bool bip10secCountdown;
bool jv10secCountdown;
bool jv30secAlert;
bool jv1minAlert;
bool jvp5minAlert;

}

@property bool bip10secCountdown;
@property bool jv10secCountdown;
@property bool jv30secAlert;
@property bool jv1minAlert;
@property bool jv5minAlert;

@end

实施:

#import "AppSettings.h"

@implementation AppSettings

@synthesize bip10secCountdown, jv10secCountdown, jv30secAlert, jv1minAlert, jv5minAlert;


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

}

@end

然后我试图在我的主类中使用这个类但是在viewDidLoad中初始化对象之后,当我想再次使用它时它显示为null ..所以我猜它发布得太早了。我正在使用ARC,因此我不会手动管理内存。难道我做错了什么 ?

主类中的声明:

AppSettings *appSettings;


}

@property(nonatomic)bool activated;
@property (nonatomic, strong) AppSettings *appSettings;

实施:

@synthetize appSettings
...
- (void)viewDidLoad
{
    // Initialize the model
    self.appSettings = [[AppSettings alloc]init];

NSLog(@"appSettings = %@",self.appSettings);

第一个输出正常。 但是当我尝试从Main类中的另一个方法访问appSettings时,appSettings是(null)

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

视图很可能已卸载,或者您的视图控制器已被释放。尝试将初始化代码移动到启动视图控制器的方法( - (id)initWithNibName:bundle :)。

答案 1 :(得分:0)

而不是:

@property (nonatomic, strong) AppSettings *appSettings;

尝试:

@property (nonatomic, retain) AppSettings *appSettings;

我建议你将AppSettings作为单身人士课程。

答案 2 :(得分:0)

当你说你在AppDelegate中初始化视图控制器时,我认为你的意思是MyViewController * theView = [[MyViewController alloc] init];或类似的东西。这将是您的第一个视图,您应该在MyViewController的viewDidLoad中初始化AppSettings,而不是AppDelegate。

关于使AppSettings成为单身人士的恶魔9733建议非常好,因为您可以从应用程序的任何位置轻松访问您的设置。

同时验证ARC是否用于MyViewController(或其可能的任何内容)