簡體   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