【问题标题】:Why is my Objective-C object being deallocated after viewDidLoad: is called?为什么我的 Objective-C 对象在 viewDidLoad: 被调用后被释放?
【发布时间】:2016-07-08 10:12:30
【问题描述】:

在 Cocoa 中的 viewDidLoad: 方法之后创建的对象被释放

请看下面的代码:

#import "ShowTableViewController.h"

@interface ShowTableViewController ()

@property NSArray *data;

@end

@implementation ShowTableViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.data = @[@"One", @"Two", @"Three"];
    NSLog(@"%ld",self.data.count);
}

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView
{
    NSLog(@"%ld",self.data.count);
    return self.data.count;
}

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
    return self.data[row];
}

@end

输出是
3
0

我使用断点检查了执行顺序 viewDidLoad 被首先调用! 我通过使用awakeFromNib 方法解决了它。但我想知道为什么会这样 任何帮助将不胜感激。

【问题讨论】:

  • 你想要什么?
  • 试试self.data = [NSArray arrayWithObjects:@"One", @"Two", @"Three", nil];
  • 不清楚你在问什么。
  • 他担心self.data 的计数在 viewDidLoad 中记录为 3,但在 numberOfRowsInTableView 中记录为 0。
  • 你怎么知道数据实际上被释放了?如前所述,您没有调用 reloaddata

标签: ios objective-c cocoa memory-management lifecycle


【解决方案1】:

像这样分配数组后,您需要在viewDidLoad 中重新加载您的tableView

- (void)viewDidLoad {
    [super viewDidLoad];
    self.data = @[@"One", @"Two", @"Three"];
    [self.tableView reloadData];
    NSLog(@"%ld",self.data.count);
}

这解决了我的问题,希望它也能解决你的问题。

【讨论】:

  • 他在tableViewDataSource方法内的数组中没有对象。
  • 我的问题是在 viewDidLoad 中创建的对象在表视图数据源方法中被释放......我不知道这怎么可能。你是否也面临同样的情况
  • 我的问题是,在viewDidLoad 中分配数组后,我没有像您一样重新加载 tableView。在reloadData 之后它工作正常。你试过吗?
  • 即使在使用 reloadData 之后,输出也是一样的。此外,我打印了它为空的对象
  • @ArunEA 目前我没有Xcode 我明天会给你回复。
【解决方案2】:

我不得不完全反对。一个在界面生成器中,另一个由我在代码中创建。该对象没有被释放。第二个对象被指定为数据源,因此它返回零。这是我的一个诚实的错误。很抱歉浪费您的时间。谢谢大家的回答:)

【讨论】:

    【解决方案3】:

    尝试将您的数据属性声明为强

    @property NSArray *data;

    变成

    @property (strong) NSArray *data;

    【讨论】:

    • strong 属性是对象的默认属性。
    猜你喜欢
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 2010-12-18
    • 2011-06-16
    相关资源
    最近更新 更多