zoukankan      html  css  js  c++  java
  • @property中strong跟weak的区别

    strong关键字与retain关似,用了它,引用计数自动+1,用实例更能说明一切

    @property (nonatomic, strong) NSString *string1;   

    @property (nonatomic, strong) NSString *string2;  

    有这样两个属性,

     @synthesize string1;   

    @synthesize string2;  

    猜一下下面代码将输出什么结果?

    self.string1 = @"String 1";   

    self.string2 = self.string1;   

    self.string1 = nil;  

    NSLog(@"String 2 = %@", self.string2);  

    结果是:String 2 = String 1

    由于string2是strong定义的属性,所以引用计数+1,使得它们所指向的值都是@"String 1", 如果你对retain熟悉的话,这理解并不难。

    接着我们来看weak关键字:

    如果这样声明两个属性:

    @property (nonatomic, strong) NSString *string1;   

    @property (nonatomic, weak) NSString *string2;  


    并定义 

    @synthesize string1;   

    @synthesize string2;  

    
    


    再来猜一下,下面输出是什么?

     self.string1 = @"String 1";   

    self.string2 = self.string1;   

    self.string1 = nil;  

    NSLog(@"String 2 = %@", self.string2);  


    结果是:String 2 = null

    分析一下,由于self.string1与self.string2指向同一地址,且string2没有retain内存地址,而self.string1=nil释放了内存,所以string1为nil。声明为weak的指针,指针指向的地址一旦被释放,这些指针都将被赋值为nil。这样的好处能有效的防止野指针。在c/c++开发过程中,为何大牛都说指针的空间释放了后,都要将指针赋为NULL. 在这儿用weak关键字帮我们做了这一步。

    感谢来访,共同学习!
  • 相关阅读:
    28完全背包+扩展欧几里得(包子凑数)
    HDU 3527 SPY
    POJ 3615 Cow Hurdles
    POJ 3620 Avoid The Lakes
    POJ 3036 Honeycomb Walk
    HDU 2352 Verdis Quo
    HDU 2368 Alfredo's Pizza Restaurant
    HDU 2700 Parity
    HDU 3763 CDs
    POJ 3279 Fliptile
  • 原文地址:https://www.cnblogs.com/dingxiaowei/p/3233157.html
Copyright © 2011-2022 走看看