2011-04-23 44 views
0

我有一個名爲Singularity的類,它內部創建了一個名爲createSingularity ::的對象的內部方法。
林不知道,如果這兩種添加自己的方法是更合適/更有效。添加到自我的NSMutableArray - 約定問題

第一種方法很簡單,直接將對象添加到自身,然後添加到NSMutableArray。 第二種方法是將對象添加到NSMutableArray,然後將其添加到自我。 檢查出來:

方法1 -

Singularity *asing = [[Singularity alloc]init]; 
    [sing createSingularity:ccp(150,150) :ccp(2000,150)]; 
    [self addChild: sing.BlackHoleParticle]; 
    [_objects addObject: sing]; 
    [sing release]; 

方法2 -

Singularity *sing = [[Singularity alloc]init]; 
    [sing createSingularity:ccp(150,150) :ccp(2000,150)]; 
    [_objects addObject:sing]; 
    [sing release]; 
    Singularity *singu = [_objects lastObject]; 
    [self addChild:singu.whiteHoleParticle]; 
    [self addChild:singu.blackHoleParticle]; 
    [singu release]; 

請注意,奇異的這些對象有boundingBoxes並需要通過_objects陣列的枚舉進行檢查。
謝謝!

+0

例如'-createSingularity ::'中的未命名參數在Objective-C中可能是合法的,但它們是編寫可讀代碼的浪費機會。像'-createSingularityFrom:to:'這樣的名字或者其他有意義的名字將會是一個很大的改進。 – Caleb 2011-04-23 05:25:01

+0

對不起,我缺乏準確性,我總是給我的參數命名,只是在給出的例子中,這不是我的問題,所以我忽略了這個細節。 – Ospho 2011-04-23 07:07:54

回答

4

方法1正確,方法2錯誤。

在方法2中,singu是對集合中對象的引用,並且您釋放對象。你不能釋放你不擁有的物體。刪除最後一行

[singu release]; 

然後就可以了。但創建多個對象來訪問函數中的元素沒有意義。所以堅持方法1