【发布时间】: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