0

这是我的问题,我应该手动将我的强属性设置为 nil 以释放它吗?

在 mytest.h 文件中

@property(nonatomic,strong) IBOutlet UIView *myView;
@property(nonatomic,weak)   IBOutlet UILabel *myLabel;
@property(nonatomic,strong) MyObject *myObject;
@property(nonatomic,strong) NSArray  *theArray;

1)在iOS5中,哪一个是正确的?功能A?还是功能 B?或功能C?

//function A
-(void)viewDidUnLoad{
 [super viewDidUnLoad];
 self.myView=nil; //strong property
 //I do not need to  self.myLabel=nil, because it is weak property
 self.myObject=nil;//strong property
 self.theArray=nil;//strong property
}

//function B
-(void)viewDidUnLoad{
 [super viewDidUnLoad];
 self.myView=nil; //strong property
 //I do not need to  self.myLabel=nil, because it is weak property
 //self.myObject=nil;//strong property ,but ARC will release it in dealloc
 //self.theArray=nil;//strong property ,but ARC will release it in dealloc
}

//function C
-(void)viewDidUnLoad{
[super viewDidUnLoad];
//do nothing here
//ARC will release it in dealloc
}

2) 在 iOS6 中 viewDidUnLoad 已被弃用,并且文档告诉我不要关心 IBOUlet 属性。那么在 ios6 下面哪个是正确的。

//function A
- (void)didReceiveMemoryWarning
{
 [super didReceiveMemoryWarning];
 //self.myView=nil;  //strong property ,but ios6 document tells me not to care IBOutlet
 //self.myObject=nil;//strong property ,but ARC will release it in dealloc
 //self.theArray=nil;//strong property ,but ARC will release it in dealloc
}

//function B
- (void)didReceiveMemoryWarning
{
 [super didReceiveMemoryWarning];
 //self.myView=nil;  //strong property ,but ios6 document tells me not to care IBOutlet
 self.myObject=nil;//strong property 
 self.theArray=nil;//strong property 
}

有谁知道详情,希望得到您的答复

顺便说一句,你认为ARC会扫描我的文件,并在编译器添加发布后自动为我添加“发布”(实际上我们在ARC中看不到任何发布)

-(void)dealloc{
  [self.myView release];
  [self.myObject release];
  [self.theArray release];
  [super dealloc];
}
4

2 回答 2

0

苹果食者,

在 iOS v5 和 v6 上的 ARC 下,由于主视图保留了子视图,因此您应该制作 IBOutlets weak。除非您需要释放其他资源,否则您可以放心地-dealloc在 ARC 下忽略。不要实施它。

问题 1:在 IBOutlets 较弱的 iOS 5 中,使用函数 C。 问题 2:在 IBOutlets 较弱的 iOS 6 中,使用函数 A。

最后一个问题:您的-dealloc方法将被编译器拒绝。只需删除它。

安德鲁

于 2012-10-26T12:59:43.903 回答
0
于 2013-01-26T23:28:51.250 回答