2011-05-06 80 views
1

我這樣的函數:大內存的問題

@property(nonatomic,retain) NSMutableArray *array; 

@synthesize array = _array; 

(NSMutableArray *) name 
{ 
    self.array = [[NSMutableArray alloc]init]; 

    [_array addObject:object]; 
    [object release]; 
    return [_array autorelase]; 
} 

中其他功能我喜歡上面的屬性,名爲result屬性,和我做:

self.result = [... name]; 

然後在dealloc中我做

[_result release]; 

和崩潰在這一點上,我怎麼能解決這個問題? 我已經嘗試了很多道路,但或者它崩潰了,或者我在樂器中看到內存泄漏,我在哪裏錯誤?

謝謝。

回答

3

雖然此代碼存在很多問題,但可能導致崩潰的原因是您要在名稱內部釋放object而不取得它的所有權 - 除非您通過調用-alloc在該方法內創建object ,-new或-copy,該方法不擁有它,並且不負責釋放它。這導致該對象在NSMutableArray內無效,因此當_result釋放時,它會嘗試釋放無效內存和崩潰。

此外,屬性不是單個函數的局部變量,它們是您正在編寫這些類的類的實例的成員變量。如果你的最終目標是隻返回一個自動釋放陣列並將其設置爲導致你可以做到以下幾點:

- (NSMutableArray *) name { 
    //call a convenience method- it comes back autoreleased 
    NSMutableArray* theArray = [NSMutableArray array]; 
    [theArray addObject:object]; 
    //don't release object unless you took ownership of it in this function 
    return theArray; 
} 

那麼函數外,或者調用self.result = [... name][self setResult:[... name]];

0

你有一個非常奇怪的方法定義(標題在返回類型之前應該有一個-),並且在該定義中,您正在訪問一個名爲object的變量,該變量似乎不存在。我不確定你想要什麼,但你至少有一個內存問題。每次調用該方法時,您在name中創建的數組都會泄漏。如果添加一些細節,例如崩潰消息,則可能有人可以提供更多幫助。