iOS错误,消息发送到解除分配的实例

时间:2013-02-19 18:58:38

标签: ios memory-management delegates initializer

我编写了自己的类(NSObject的子类),并为它编写了自定义初始化程序。我遇到的问题是,当我启动我的应用程序,并调用refreshData实例方法时,一切正常。当我再次调用refreshData方法时,该对象被释放,我得到错误。初始化实例时,将分配内存,但不知何故,它将被释放。我错过了什么?

的UIViewController:

- (void)viewDidLoad {

    [super viewDidLoad];

    // Initialze an instance of our data controller class
    dataController = [FCDataController initWithObject:self animated:NO];
    [dataController refreshData];
}

NSObject的:

+ (FCDataController *)initWithObject:(id)object animated:(BOOL)animated {

    FCDataController *dataController = [[FCDataController alloc] initWithObject:object animated:animated];

    return dataController;
}

- (id)initWithObject:(id)object animated:(BOOL)animated {

    self = [super init];

    if (self) {

        self.delegate = object;
        self.animated = animated;
    }
    return self;
}

1 个答案:

答案 0 :(得分:0)

viewDidLoad只会在UIViewController的子类上调用。这个类真的是UIViewController的子类吗?

假设这是一个视图控制器,该类的实例已经创建并在调用viewDidLoad时运行。 viewDidLoad中的行将创建同一个类的第二个实例,将第一个实例指定为第二个实例的委托。这可能不是你想要的。

您可能只想在加载视图时刷新数据。

- (void)viewDidLoad {
    [super viewDidLoad];

    // Initialze an instance of our data controller class
    [self refreshData];
}

为了进一步扩展它,您可能不需要刷新init上的数据,因为您只是在视图加载时再次刷新它。