• difference between instance variable and property


    @interface MyClass : NSObject {
        NSString *name;
        NSArray *items;
    
        Something *something;
    
        IBOutlet NSTextField *myTextField;
    }
    
    @property (nonatomic, retain) NSString *name;
    @property (nonatomic, retain) NSArray *items;
    

      

    in the iPhone world, there's no garbage collector available. You'll have to carefully manage memory with reference counting. With that in mind, consider the difference between:

    name =@"Test";

    and

    self.name =@"Test";// which is equivalent to:[self setName:@"Test"];

    If you directly set the instance variable, without prior consideration, you'll lose the reference to the previous value and you can't adjust its retain count (you should have released it manually). If you access it through a property, it'll be handled automatically for you, along with incrementing the retain count of the newly assigned object.

    The fundamental concept is not iPhone specific but it becomes crucial in an environment without the garbage collector.

    Declaring ivar via just declaring a property for it is a new language feature available starting objc 2.0

    In "Run-time differences" section of "Objective-c programming language" reference stated:

    For @synthesize to work in the legacy runtime, you must either provide an instance variable with the same name and compatible type of the property or specify another existing instance variable in the @synthesize statement. With the modern runtime, if you do not provide an instance variable, the compiler adds one (_propertyName) for you.

  • 相关阅读:
    python web 2
    python web1(解析url)
    webstrom 今天突然要激活
    数组排序 记录一下
    浏览器添加随机数去除缓存
    vue-cli 安装报错
    vue 初始化项目报错
    深拷贝和浅拷贝
    css3 属性 clip-path
    js数组去重
  • 原文地址:https://www.cnblogs.com/fengjian/p/3309406.html
Copyright © 2020-2023  润新知