【发布时间】:2011-08-01 12:58:54
【问题描述】:
鉴于我上次的question,我决定从一个简单的类开始,以包含二维数组数据。
界面:
@interface DynamicTable
NSString ***data;
NSInteger _cols;
NSInteger _rows;
@end
初始化器:
-(id)initWithRows:(NSInteger)rows withCols:(NSInteger)cols {
if (self = [super init]) {
_rows = rows;
_cols = cols;
data = (NSString ***)malloc(_rows * sizeof(NSString **));
for (int i = 0; i < _rows; ++i) {
data[i] = (NSString **)malloc(_cols * sizeof(NSString *));
for (int j = 0; j < _cols; ++j) {
NSString *cell = [[NSString alloc] initWithFormat:@"%d",(i + j)];
data[i][j] = cell;
}
}
}
return self;
}
我们是否保留?
此刻,我正在与一名实习生(之前曾为 iPhone 开发过,而我没有)进行过激烈的讨论,作业 data[i][j] = cell; 是否不应该数据[i][j] = [单元格保留];。
第二个版本来自 SO 上的另一个示例。我已经从同一个问题中复制了 dealloc 例程。
我们会因任务而释放吗?
下一位代码负责在给定单元格中设置新值。问题再次出现,是否释放原始值(我已经认为这都是通过引用传递的)。
-(void)setValue:(NSString *)value atRow:(NSInteger)row atCol:(NSInteger)col {
//NSString *cell = data[row][col];
data[row][col] = value;
//[cell release];
}
如你所见,我已经注释掉了应该释放原始值的位。
iPhone 中的整个内存管理似乎非常可怕。我已经在苹果网站和其他网站上阅读了很多关于此的内容,但是一次可以吸收很多内容。 具有清晰解释的小例子通常最适合我 LOL
回到我的问题:
从我的角度来看(不确定我是否正确),我应该释放放入给定单元格中的原始值。任何人都可以在这里确认我在正确的轨道上吗?
PS 我一直在尝试使用 Run with Performance Tool -> Leaks...但是我对 iPhone 知识的缺乏也让我望而却步。
【问题讨论】:
标签: iphone objective-c xcode memory-management