繁体   English   中英

在Objective-C中调用C函数时内存未释放

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM