我有这个方法
-(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 autorelease]; 不会像我怀疑和测试的那样起作用。
感谢。
答案 0 :(得分:3)
因为您的方法名称中包含“Create”,所以调用者应该负责释放该对象。请参阅http://developer.apple.com/library/ios/documentation/CoreFoundation/Conceptual/CFMemoryMgmt/Concepts/Ownership.html#//apple_ref/doc/uid/20001148-103029。
更新:因为这是一个方法而不是一个函数,您应该将其更改为以http://developer.apple.com/library/ios/documentation/cocoa/Conceptual/MemoryMgmt/Articles/mmObjectOwnership.html#//apple_ref/doc/uid/20000043-SW1中所述的“新”开头。
答案 1 :(得分:1)
您需要遵循内存约定。您的方法中包含“创建”一词,这意味着调用该方法的任何人负责在完成后调用CGContextRelease
。如果您不喜欢这个想法,那么您需要找到一些方法来了解调用者何时完成它。