最近在研究自定义控件,想找到一个比较规范的自定义控件方法,然后我又遇到了一直都迷惑,从来没搞明白的问题
@property和@synthesize
这是个灾难!!!我竟然用了这么久的@property还是没搞明白好想死!!!
问题1:@property和@synthesize到底做了什么
在之前的时候,@property是用来代替声明变量的时候的set 、get方法,而@synthesize是为了代替set、get方法的实现
比如说,如果不用@property来声明变量的话,就要这样写
而使用了@property来声明的话就简洁很多
将的两种写法对比,可以得知,@property代替了属性声明时的set、get方法,@synthesize代替了set、get方法的实现
当然,这是之前的oc语言写法,现在的情况是:使用@property来声明属性的时候,已经不需要来写@synthesize了,系统会自动添加这行代码
但是
如果你写成了@synthesize name; 那么后面你使用这个属性的时候就要写self.name 或者直接写 name ,不能在写_name.
关于下划线有一篇博客写的很经典http://blog.csdn.net/ztp800201/article/details/9231617
虽然现在已经告别了@synthesize,但是有时候你可能需要重写get,set的实现方法,比如说在自定义控件的时候
下面是一个自定义控件的例子
当在自定义的控件中添加subView的时候,使用重写get方法的方式来实例化view
这种方法是在写自定义控件的时候在一篇博客上看到的,到底为什么这样写我也不是很清楚,貌似可以使代码更简洁?
但是我们知道,系统自动创建的get方法中并没有自动创建实例变量,在使用NSString和数值类型的时候没有问题,但是在使用数组等对象类型的时候就会发现对象一直都是nil
这是因为系统不会自动帮你实例化,所以你要自己手动实例化,在viewdidload中实例化或者在重写get方法中实例化都可以