请告诉我正确的方式来释放一个@property/IBOulet的UIViewController中

问题描述:

我读过有关正确的内存管理可可/ Objective-C的许多不同的事情请告诉我正确的方式来释放一个@property/IBOulet的UIViewController中

例如香港专业教育学院读任何IBOutlets需要被设置为'零“,但像NSArray dosnt?

我也想知道,是很重要之前调用超级方法或后我释放/无一切

为了把这个内存问题睡觉,可有的请与100%正确的方式回复您会创建一个保留的属性并将其释放。如果你不是100%确定,请不要回答。

这是我现在正在做的事情,但有些东西显然是错误的,因为我得到了非常令人沮丧的EXEC_BAD_ACCESS!?!几乎就像我发布了两次?

header.h

@interface MyViewController : UIViewController { 

    UILabel *aLabel; 
    NSArray *aArray; 

} 
@property (nonatomic, retain) IBOutlet UILabel *aLabel; 
@property (nonatomic, retain) NSArray *aArray; 

method.m

@implementation MyViewController 

@synthesize aLabel, aArray; 

- (void)dealloc 
{ 
    [aLabel release], aLabel = nil; 
    [aArray release]; 
    [super dealloc]; 
} 

- (void)viewDidUnload 
{ 
    self.aLabel = nil; //Not sure about this bad boy??? 
    [super viewDidUnload]; 
} 

@end 
+0

你有正确的想法。 dealloc中的'aLabel = nil'是不必要的,但无害。你的崩溃发生在哪里? – 2011-05-24 12:02:20

+0

Argh jeez,刚刚发现我因为一些疯狂的原因在我的某个方法中释放了我的财产。我知道它释放两次!那么我所做的是正确的呢?只要在dealloc及其所有快乐的日子里省略aLabel =零? – jennas 2011-05-24 12:26:35

+0

'aLabel = nil'不会崩溃或任何东西。它只是清理一只即将离开物体其余部分的伊娃。所以这不是必要的。 – 2011-05-25 01:21:20

在的dealloc您已经发布了aLabel.Means它不是memory.Again你写这行--- aLabel = nil;删除这行。所以它不能给出Exec_badaccess。这意味着事件,即使你没有指针stilll你试图访问指针。