我正在开发一个包含基于 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() 的内存管理应该没问题。
可能是什么问题?