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