2020-04-10

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)