经常会混淆这三者之间的区别,今天在此做个总结!
贴代码
@interface ViewController ()<UITableViewDelegate,UITableViewDataSource>
{
UITableView *tableV;
NSInteger integer;
}
@property (nonatomic, strong)UIButton *btn;
@end
首先明确{ }里的都是成员变量:tableV、integer都是成员变量。那什么是实例变量呢?
实例变量的本质是成员变量,但是是针对类而言。就比如上面{ }中tableV就是实例变量。
剩下的@property (nonatomic, strong)UIButton *btn;也就是属性。
他们三者之间有什么区别以及作用呢?
成员变量和实例变量都是类的私有变量,主要是服务类本身的,无法生成set、get方法进而就无法与外界联系,是类的私有变量。
与之对应的属性允许外界访问,并且在声明属性的时候假如没有自己声明@ dynamic系统会帮助我们生成set、get方法。
上面介绍完了这三者之间的区别总感觉写的太少,我再多说一段关于属性property后面可以接什么修饰符。
property()内拢共可以接4种修饰符:
①:原子性natomic和非原子性nonatomic:由于存在手机客户端的性能瓶颈以及原子性也并不是绝对线程安全等问题,我们默认都选择非原子性nonatomic
②:内存管理语义:retain,strong,copy,weak,assign。具体用法和区别上网搜,忙着备面试,没时间细聊。
③:读写权限:readwrite、readonly
④:getter和setter修饰符
@property(getter = getMethodName, setter = setMethodName) Object *obj;
这两个属性修饰符用于设置自定义生成的getter和setter方法名,使用之后将不再使用系统默认的setter和getter方法名。
就唠这么多。