[英]Memory not release when calling c function in objective-c
我正在开发一个包含基于C的核心模块并使用可可触摸来实现UI的应用程序。 我将调用c模块来获取要在屏幕上显示的数据,但此后,内存似乎没有释放。 我使用配置文件工具来观察泄漏,并且没有泄漏出现。 但是, 所有分配的“总字节数”字段在发布后不会减少。 也就是说,如果我重复多次该操作,则每次都会增加内存,最终导致应用程序崩溃。
这是我使用的代码。
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()的内存管理应该很好。
可能是什么问题?
继续关注我的评论...您拥有以下内容(在您的UI .m文件中):
@property (nonatomic, reatin) NSString* name;
它应该是:
@property (nonatomic, retain) NSString* name;
您将关键字拼写错误地retain
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.