2009-04-19 67 views
3

我有這樣的代碼:演員 「常量無效*」,以 「爲const char *」

NSData *data = [NSData dataWithContentsOfURL:objURL]; 
const void *buffer = [data bytes]; 
[self _loadData:buffer]; 
[data release]; 

的 「_loadData」 功能需要一個參數,如:

- (void)_loadData:(const char *)data; 

如何轉換「 const void 「改爲Objective-C上的」const char「?

+0

[data release];線是不必要的。在非垃圾收集環境中,您的應用程序可能會崩潰,並且它表明您沒有完全理解Cocoa內存管理。如果你明確地調用了alloc,copy或者mutableCopy(也許別人現在無法想象),那麼你只能釋放它。從[NSData dataWithContentsOfURL:]返回的對象會自動釋放或垃圾收集。 – dreamlax 2009-04-19 17:00:42

+0

即使在沒有垃圾收集的iPhone上? – 2009-04-19 17:10:49

+0

在非垃圾收集環境中,該對象被添加到自動釋放池中,並且可能會在下一個事件循環或釋放池本身時解除分配。無論如何,如果你知道我的意思,你就不會「擁有」返回的對象,因此它不是你的發佈對象。你只擁有你明確分配的對象,通過+ alloc,-copy或-mutableCopy(也可能是其他)。 – dreamlax 2009-04-19 17:27:57

回答

5

就像你在C將:

[self _loadData:(const char *)buffer]; 

應該工作。

3

由於沒有明確分配數據對象,因此您不得釋放數據對象。此外,你可以做一個簡單的演員:

[self _loadData:(const char *) buffer];