到这里我们需要了解oc的类构成、以及重要的关键字
@interface
@end
在这两个@里面的是oc .h中类的声明格式
在.m中要这样写
@implement
@end
这个里面写类的实现。
习惯了java的我觉得这样写十分费劲,声明又实现的。
@interface既然不是接口(接口的声明 @protocol) 一肚子鄙夷的话暗自骂过,但是谁叫人家这样规定的呢、咱们程序员只能学习接受。
好了这里要解释第一个教程中所说的自动声明get set方法
@property是在头文件.h中声明一个变量的setter和getter方法。
@synthesize是在m文件中定义setter和getter方法的实现。
在声明这些属性的时候同时你还要赋予其各自的属性和权限。
Objective-C 属性特性(assign , retain , copy , readonly , readwrite , atomic , nonatomic,strong weak)
assign: 简单赋值,不更改索引计数。对基础数据类型 (例如NSInteger)和C数据类型(int, float, double, char, 等) 适用简单数据类型
retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1,对其他NSObject和其子类
copy:建立一个索引计数为1的对象,然后释放旧对象对NSString 它指出,在赋值时使用传入值的一份拷贝。拷贝工作由copy方法执行,此属性只对那些实行了NSCopying协议的对象类型有效。更深入的讨论,请参考“复制”部分。
retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1
对其他NSObject和其子类
readonly此标记说明属性是只读的,默认的标记是读写,如果你指定了只读,在@implementation中只需要一个读取器。或者如果你使用@synthesize关键字,也是有读取器方法被解析。而且如果你试图使用点操作符为属性赋值,你将得到一个编译错误。
readwrite此标记说明属性会被当成读写的,这也是默认属性。设置器和读取器都需要在@implementation中实现。如果使用@synthesize关键字,读取器和设置器都会被解析
nonatomic:非原子性访问,对属性赋值的时候不加锁,多线程并发访问会提高性能。如果不加此属性,则默认是两个访问方法都为原子型事务访问。
atomic:设置成员变量的@property属性时,默认为atomic,提供多线程安全 与上文正好相反。
strong weak
strong与weak是由ARC新引入的对象变量属性
ARC引入了新的对象的生命周期限定,即零弱引用。如果零弱引用指向的对象被
deallocated的话,零弱引用的对象会被自动设置为nil。
强引用与弱引用的广义区别:
强引用也就是我们通常所讲的引用,其存亡直接决定了所指对象的存亡。如果不
存在指向一个对象的引用,并且此对象不再显示列表中,则此对象会被从内存中
释放。
弱引用除了不决定对象的存亡外,其他与强引用相同。即使一个对象被持有无数
个若引用,只要没有强引用指向他,那么其还是会被清除。
简单讲,strong等同retain,weak比assign多了一个功能,当对象消失后自动把
指针变成nil。
self 关键字 :类似于java中的this,是隐藏参数,指向当前调用方法的类。
super 关键字 :调用父类的方法。
基本介绍完毕,我们还需要了解下oc中的---协议@protocol @required
这个协议就是学习过java的同学所熟悉的interface (接口)
很奇怪吧。似的在oc里面就是这样定义的 而我们熟悉的class
在oc中表示引入某个对象的类 @class 与 #import类似
一、什么是协议?
1.协议声明了可以被任何类实现的方法
2.协议不是类,它是定义了一个其他对象可以实现的接口
3.如果在某个类中实现了协议中的某个方法,也就是这个类实现了那个协议。
4.协议经常用来实现委托对象。一个委托对象是一种用来协同或者代表其他对象的特殊对象。
5:委托,就是调用自己定义方法,别的类来实现。
大大可以理解为,只要大家遵循同一个协议,这样就可以被特定的方法所处理了。
也可以理解为一种特别的多继承。
二、格式
协议
三、协议里的关键字
协议中有2个关键字可以控制方法是否要实现(默认是@required),在大多数情况下,
用途在于程序员之间的交流
@required:这个方法必须要实现(若不实现,编译器会发出警告)
@required
- (void)test;
- (void)test2;
@optional:这个方法不一定要实现
@optional
- (void)test3;
四、基协议
NSObject是一个基类,最根本最基本的类,任何其他类最终都要继承它
其实还有一个协议,名字也叫NSObject,它是一个基协议,最根本最基本的协议
NSObject协议中声明很多最基本的方法,比如description、retain、release等
建议每个新的协议都要遵守NSObject协议
五、注意点:
协议可用定义在单独.h文件中,也可用定义在某个类中
1> 如果这个协议只用在某个类中,应该把协议定义在该类中
2> 如果这个协议用在很多类中,就应该定义在单独文件中
分类可用定义在单独.h和.m文件中,也可用定义在原来类中
一般情况下,都是定义在单独文件
定义在原来类中的分类,只要求能看懂语法