我有这个方法
-(CGContextRef) createPDFContext:(CGRect)inMediaBox path:(CFStringRef) path
{
// bla bla
// at some point I have
CGContextRef myOutContext = CGPDFContextCreate (dataConsumer, &inMediaBox, NULL);
// and then I have to return the value
return myOutContext;
}问题是myOutContext没有发布,而且会泄漏。
如果在返回之前放置一个CGContextRelease (myOutContext),那么引用将到达调用方时无效.
我该怎么解决呢?执行返回myOutContext自动释放;正如我所怀疑和测试的那样,将无法工作。
谢谢。
发布于 2010-10-09 02:06:41
因为您的方法的名称是"Create“,因此预期调用方将负责释放该对象。见http://developer.apple.com/library/ios/documentation/CoreFoundation/Conceptual/CFMemoryMgmt/Concepts/Ownership.html#//apple_ref/doc/uid/20001148-103029。
更新:因为这是一个方法,而不是一个函数,所以您应该修改它以"new“开头,如http://developer.apple.com/library/ios/documentation/cocoa/Conceptual/MemoryMgmt/Articles/mmObjectOwnership.html#//apple_ref/doc/uid/20000043-SW1中所描述的那样。
发布于 2010-10-09 02:06:59
您需要遵循内存约定。您的方法中有"create“一词,这意味着调用该方法的人在使用该方法时负责调用该方法的CGContextRelease。如果你不喜欢这个想法,那么你需要找到一些方法来知道打电话的人什么时候结束了。
https://stackoverflow.com/questions/3895181
复制相似问题