先来一发代码,捋一捋(+方法就是类方法,-方法就是实例方法):
+ (void)thisIsAClassMethod; // 类方法,不需要实例化对象就可以调用- (void)thisIsAnInstanceMethod; // 实例方法,必须通过实例化的对象调用// 对象的初始化 OC中以消息机制传递信息,发送 alloc 消息给类分配内存空间,发送 init 消息生成对象,指针指向对象本身。ClassName *obj = [[ClassName alloc] init];
类方法:
1、类方法可以调用类方法;
2、类方法不可以调用实例方法,但是类方法可以通过创建对象来访问实例方法;
3、类方法不可以使用实例变量。(可以使用self ,因为 self 不是实例变量。)
4、类方法作为消息,可以发送到类或者对象里面去(就是可以通过类或者对象调用类方法)
实例方法里面的 self ,是对象的首地址。
类方法里面的 self ,是 class 。
使用过程中既可以使用新定义的方法名,也可以使用以前的方法(点表示法)
属性特征:readwrite readonly assign retain copy nonatomic
assign:默认行为,使用 @property int num 就是使用了 assign 行为,就是给实例变量赋了一个值
retain:实现了两个功能,一个是保留了赋值时传递的对象,一个是赋值前释放了以前的值,使用时加上 @property (retain) int num;
copy:发送一条复制的消息给被传递的对象,保留它,并释放任何以前的值;
nonatomic:非原子访问器,加上后可以保证属性在被一个线程使用时不被另一个线程访问,不存在 atomic 关键字,默认情况下,所有方法都是自动合成的。(类似Java中的线程锁机制 synchronised)
readwrite:可读写
readonly:只读
文章转载于:https://www.jianshu.com/p/c67fbf9d79d1
原著是一个有趣的人,若有侵权,请通知删除
还没有人抢沙发呢~