2009-04-19 81 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]; 
相关问题