1
如果我有一個包含另一個對象Item的對象Sale。比方說,我的銷售標題是這樣的:在Objective-C中釋放對象的正確方法
#import <Foundation/Foundation.h>
#import "Item.h"
@interface Sale : NSObject {
Item *item;
}
@property (readonly) Item *item;
-(id) initWithItem:(Item*)i;
@end
而在我的函數創建一個新的項目和銷售對象,像這樣:
Item *i = [[Item alloc] init];
Sale *s = [[Sale alloc] initWithItem:i];
[i release];
如果,當我與銷售對象做了我簡單地做:
[s release];
是足以確保所有內存分配的有效清理?
此外,如果我稍後嘗試訪問[s項目],將釋放*我會導致任何問題?
如果我只是指定我喜歡這個怎麼樣?: item = i; – link664 2011-03-30 22:21:15
@ link664在這種情況下,您正在存儲一個弱引用:'s'不擁有'i',它只是引用它。因此,如果你在's'之外釋放'i'(如你的例子),如果你試圖訪問'[s item]',你將遇到問題。我建議你在初始化程序中複製/保留'i',並在'dealloc'中釋放它。 – 2011-03-30 22:29:44