美文网首页
strong 和 weak的使用

strong 和 weak的使用

作者: 方克己 | 来源:发表于2015-12-03 10:42 被阅读118次

    先举个栗子

    例如下面两个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 **

    相关文章

      网友评论

          本文标题:strong 和 weak的使用

          本文链接:https://www.haomeiwen.com/subject/rphshttx.html