2012-09-18 30 views
1

我從一個方法返回時,用CoreGraphics管理內存似乎總是有很多麻煩。採取下面的情況:我想initWithMutablePathCoreGraphics,內存釋放,返回值

Potential leak of an object allocated on line 38 and stored into 'mutablePath' 

- (id) init 
{ 
    CGMutablePathRef mutablePath = CGPathCreateMutable(); 

    //mutable path gets loaded with some hard data 

    return [self initWithMutablePath:mutablePath]; 
} 

- (id) initWithMutablePath:(CGMutablePathRef)mutablePath 
{ 
    self = [super init]; 

    if (self) 
    { 
     _mutablePath = (CGMutablePathRef) CGPathRetain(mutablePath); 
    } 

    return self; 
} 

是從儀器得到這個消息(CGMutablePathRef)mutablePath初始化保留mutablePath,因爲它可能會從其他地方在那裏被稱爲這將是必要的。然而,我也希望init方法能夠毫無例外地將mutablePath傳遞給它。這如何實現?

+0

CGPathRetain可能是原因.. CGPathCreateMutable爲您提供了保留狀態,爲什麼再次使用CGPathRetain? –

+0

@LithuThiruvathira - 是的,我認爲是的,但是這個初始值還需要從別的地方調用,所以我需要保持這種方式。 –

+0

make CGMutablePathRef mutablePath = CGPathCreateMutable();在if循環if(mutablepath)中加入 ,然後將其添加到initWithMutablePath:方法中,從init方法中刪除tht –

回答

0

這似乎是我想做的事情是不可能的,所以我最終擺脫了initWithMutablePath(這是基類的構造函數),最後我沒有在基類中實現構造函數。我有繼承它的子類,它實現了初始化並加載路徑。