美文网首页
2020-04-10

2020-04-10

作者: Stephen_Huang | 来源:发表于2020-04-16 16:10 被阅读0次

    1.@property 的本质是什么?
    @property的本质 = ivar (实例变量) + getter (取方法) + setter (存方法)
    “属性”(property)有两大概念:实例变量(ivar)、存取方法(getter + setter)
    2、ivar、 getter 、setter 是如何生成并添加到这个类中的
    这是编译器自动合成的,通过@synthesize 关键字指定,若不指定,默认为@synthesize propertyName = _propertyName;若手动实现了getter/setter 方法,则不会自动合成。
    现在编译器已经默认为我们添加了@synthesize propertyName = propertyName;因此不再手动添加了,除非你真的要改变成员变量名字。
    生成getter方法时,会判断当前属性名是否有“
    ”,比如声明属性为@property(nonatomic,copy)NSString *_name;那么所生成的成员变量名就会变成“name”,如果我们要手动生成getter 方法,就要判断是否以“”开头了。
    2.分别解释strong,copy,weak,assign的含义,异同点和使用场景
    assign用于对基本数据类型进行赋值操作,不更改引用计数。也可以用来修饰对象。
    weak修饰Object类型,修饰的对象在释放后,指针地址会被置为nil,是一种弱引用。在ARC环境下,为避免循环引用,往往会把delegate属性用weak修饰;在MRC下使用assign修饰。
    ARC下的strong等同于MRC下的retain都会把对象引用计数加1。
    weak和strong不同的是:当一个对象不再有strong类型的指针指向它的时候,它就会被释放,即使还有weak型指针指向它,那么这些weak型指针也将被清除。

    相关文章

      网友评论

          本文标题:2020-04-10

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