strong 和 weak的使用

先舉個栗子

例如下面兩個button1:@interface ViewController ()
@property (nonatomic,`strong`)UIButton *button1;
@end
@implementation  ViewController
-(UIButton *)button1{  
  if (!_button1) {
  _button1=[UIButton buttonWithType:UIButtonTypeCustom];      
  _button1.frame=CGRectMake(50, 50, 100, 100);        
 [_button1 setTitle:@"第一個
" forState:UIControlStateNormal];_button1.backgroundColor=[UIColor redColor];   }
    return _button1;
}
- (void)viewDidLoad {
    [self.view addSubview:self.button1];
}
@end
2:@interface ViewController ()
@property (nonatomic,`weak`) UIButton *button2;
@end@implementation ViewController
- (void)viewDidLoad {  
  [super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.
   UIButton *btn=[UIButton buttonWithType:UIButtonTypeCustom];    
   btn.frame=CGRectMake(100, 100, 100, 100); 
   [btn setTitle:@"第二個" forState:UIControlStateNormal];    
   btn.backgroundColor=[UIColor yellowColor];    
   [self.view addSubview:btn]; 
  _button2=btn;}
@end

這里是解釋

**我先說下你兩個代碼的區別,第一個,當button 從試圖移除之后不會釋放,因為有強引用類型指向它,所以如果不再次釋放一下,
這個引用計數就是1第二個,如果從父試圖移除,這個button就直接釋放了,因為是弱引用,弱引用不對引用計數造成影響

何時使用的問題.如果一個對象在某段時間中反復加載,而你又不希望每次加載都要重新alloc 的話,那就strong,strong 保證對此對象保持一個強引用,對于這個對象,只要有1個strong引用的話,那它就不會釋放,當然多個strong同時作用于它也不會釋放。

如果一個對象在某段時間只會加載一次,并且加載之后確定不再使用了,那就可以使用weak,這樣當其他原因導致引用計數減1(比如 removefromsuperview)的時候,此對象就自動釋放了。
無需再在delloc 里面再release一次,但你要保證釋放之后確實不再使用此對象,否則將導致錯誤其實strong和retina的作用有些像,只不過strong 和weak是在arc里面引入的,他倆算是一對兒, 對應關系有點類似 retiam 和assign **

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容