2013-07-05 109 views
0

我剛剛使用Xcode的工具將項目從MRR移動到ARC。我有這樣的例程:ARC在方法中創建新對象

@interface myObject 
{ 
    NSMutableArray* __strong myItems; 
} 
@property NSMutableArray* myItems; 
- (BOOL) readLegacyFormatItems; 
@end 



- (BOOL) readLegacyFormatItems 
{ 
    NSMutableArray* localCopyOfMyItems = [[NSMutableArray alloc]init]; 
    //create objects and store them to localCopyOfMyItems 

    [self setMyItems: localCopyOfMyItems] 

    return TRUE; 
} 

這在MRR下工作正常,但在ARC下,myItems會立即發佈。我該如何解決這個問題?

我已閱讀關於__strong和__weak引用,但我還沒有看到如何在這種情況下應用它們。

非常感謝所有的信息!

回答

1

這應該工作,因爲它是。但是你不需要再申報iVars。只需使用屬性。你甚至不需要綜合它們。強大的屬性將保留任何指定的對象,弱的屬性不會。

此外,類名應始終爲大寫。而且 - 既然你存儲了一個可變數組,你也可以將你的對象直接添加到屬性中。不需要另一個局部可變數組變量。

@interface MyObject 
@property (nonatomic, strong) NSMutableArray *myItems; 
- (BOOL)readLegacyFormatItems; 
@end 


@implementation MyObject 

- (BOOL) readLegacyFormatItems 
{ 
    self.myItems = [[NSMutableArray alloc]init]; 

    //create objects and store them directly to self.myItems 

    return TRUE; 
} 

@end 
+0

感謝您的信息。那麼也許我犯的錯誤就是我首先創建MyObject的方式。當一個特定的菜單項被點擊時,我有一個IBAction。它看起來像這樣: (IBAction)importLegacyItems:(id)sender {myObject * newInstanceOfmyObject; newInstanceOfmyObject = [[myObject alloc] init]; [newInstanceOfmyObject \t \t \t readLegacyFormatItems]; } 我必須做一些事情來保持newInstanceOfmyObject在這個例程結束時被釋放嗎? – VikR

+0

奇怪的是,我無法在這裏更好地格式化! – VikR

+0

我想我可能已經找到了它 - 我需要通過windowcontroller創建對象。例如theWindowController = [[NSWindowController alloc] initWithWindowNibName:@「MyObject」myObject]; – VikR