" - [CFString respondsToSelector:]:发送到解除分配的实例的消息"在尝试访问objectArray时

Daf*_*ffy 1 iphone memory-leaks memory-management objective-c uitableview

当程序获取最后一行时,我试图在tableView中加载接下来的10行数据

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
Run Code Online (Sandbox Code Playgroud)

我正在使用带有pagenumber参数的单个函数来加载连续的页面.它适用于第一次获取,即pagenumber 0,但当我再次调用它来获取下一页行时,它给了我这个错误

-[CFString respondsToSelector:]: message sent to deallocated instance
Run Code Online (Sandbox Code Playgroud)

在敲了敲我的头很长一段时间之后,我发现它在尝试访问Model对象的NSMutableArray时会产生这个问题.我这样使用它:

TableRowObjectClass* TempObject = [[TableRowObject alloc] init];
for(int i=0;i<rowArray.count;i++){
    TempObject = [rowArray objectAtIndex:i];
    NSString* objectProperty = [[[NSString alloc] initWithFormat:@"String Property I need from Object to be appended with some text from TableRowObject Class : %@",TempObject.objProperty] retain];
    [propertyArray addObject:objectProperty];
    [objectProperty release];
}
Run Code Online (Sandbox Code Playgroud)

这里我得到了模型对象数组(TableRowObjectClass的对象),我想从TempObject中提取objectProperty并创建所有这些属性的数组.最初,对于pagenumber0,它获取20行,现在当我显示第20行时,我调用fetch,调用此函数创建一个新的数组,objectProperty我调用[TableView reloadData]以显示带有20(旧)+20(新鲜)提要的frsh提要.

现在它创建了这个错误

-[CFString respondsToSelector:]: message sent to deallocated instance
Run Code Online (Sandbox Code Playgroud)

当试图访问时,

NSString* objectProperty = [[[NSString alloc] initWithFormat:@"String Property ....TableRowObject Class: %@",TempObject.objProperty] retain];
Run Code Online (Sandbox Code Playgroud)

我不确定它到底是什么,在哪里dealloc.我花了很多时间在这上面,我对目标c内存管理并不是很好.

非常感谢您的帮助.

bbu*_*bum 5

您的代码非常清楚地表明您不了解Objective-C或Objective-C内存管理; 不用担心,我们都是从那里开始的.首先阅读Objective-C指南,然后阅读内存管理指南.

一些具体问题:

TableRowObjectClass* TempObject = [[TableRowObject alloc] init];
TempObject = [someArray objectAtIndex: 0];
Run Code Online (Sandbox Code Playgroud)

泄漏.在第一行分配的对象(该变量也应以小写字母开头).

这个:

NSString* objectProperty = [[[NSString alloc] initWithFormat:@"..."] retain];
[objectProperty release];
Run Code Online (Sandbox Code Playgroud)

双重保留由单个释放平衡,另一个泄漏.

您看到message sent to deallocated instance错误表示您过度释放其他对象.遵循内存管理指南,使用"构建和分析",然后使用僵尸检测工具....