1

我正在开发一个包含基于 C 的核心模块并使用可可触摸来实现 UI 的应用程序。我将调用 c 模块来获取数据以显示在屏幕上,但在那之后,内存似乎没有被释放。我用剖析工具观察泄漏,并没有出现泄漏。但是All Allocations的 Total Bytes 字段在发布后不会减少。也就是说,如果我多次重复操作,每次都会增加内存,最终导致应用程序崩溃。

这是我使用的代码。

In Interface ( ClassA.m file)

-(NSString*) getName:(int) index{
    int len = get_name_len(index);
    char* name = malloc(len); // name[len-1] indicate NULL CHAR
    get_name(name,index,len);
    NSString *result = [NSString stringWithUTF8String:name];
    free(name);
    name = nil;
    return result;
}

In UI (.m file)

@property (nonatomic, retain) NSString* name;

...

-(void) update {
self.name = [ClassA getName:0];
}

...

-(void) dealloc{
self.name = nil;
[super dealloc];
}

我有大约 100 个数据。如果我调用 self.name = [ClassA getName:0]。它会增加一些内存并且在我调用 self.name = nil 后不会释放。然后,如果我调用 self.name = [ClassA getName:1]。它会再次增加。但是如果我多次调用同一个 self.name = [ClassA getName:0] ,它只会增加一次。(在再次调用这个函数之前,我会先调用 self.name = nil)。

太奇怪了。

我也尝试:

[ClassA getName:0];
self.name = [NSString* stringWithString@"ABC"];

然后,内存将被正确释放。

我认为这可能表明 self.name 和 function:getName() 的内存管理应该没问题。

可能是什么问题?

4

1 回答 1

0

跟进我的评论...您有以下内容(在您的 UI .m 文件中):

@property (nonatomic, reatin) NSString* name;

它应该是:

@property (nonatomic, retain) NSString* name;

您拼写错误的关键字retain

于 2012-08-03T06:38:42.900 回答