2009-08-30 64 views
2

我在做什麼錯了?當我嘗試登錄數組時,我的代碼崩潰。這是我的課程:在一個類中的多個方法之間共享NSArray內容

@interface ArrayTestAppDelegate : NSObject <UIApplicationDelegate> { 
    UIWindow *window; 
    NSArray *array; 
} 

@property (nonatomic, retain) IBOutlet UIWindow *window; 
@property (nonatomic, retain) NSArray *array; 

-(IBAction)buttonPressed; 

@end 

@implementation ArrayTestAppDelegate 

@synthesize window, array; 


- (void)applicationDidFinishLaunching:(UIApplication *)application {  

    array = [NSArray arrayWithObjects:@"Banana", @"Apple", @"Orange", @"Pear", @"Plum", nil]; 

    [window makeKeyAndVisible]; 
} 

-(IBAction)buttonPressed { 

    NSLog(@"%@", array); 

} 


- (void)dealloc { 
    [window release]; 
    [array release]; 
    [super dealloc]; 
} 


@end 

回答

5

這是Cocoa中常見的內存管理錯誤。 NSArray類的arrayWithObjects方法返回一個自動釋放對象。當您嘗試在buttonPressed方法中記錄數組時,陣列已經被釋放,並且您會崩潰。解決方法是簡單的:

array = [[NSArray alloc] initWithObjects:@"Banana", @"Plum", nil]; 

或者:

array = [[NSArray arrayWithObjects:@"Banana", @"Plum", nil] retain]; 

我想第一個是好,保持在第二個例子中,到底是容易錯過。我建議你閱讀一些關於可可內存管理的文章。

相關問題