objective-c 类

2018-04-10  本文已影响0人  一世长安乱

类的声明

@interface开头

@end 结尾

类名的首字母必须 大写
声明类的目的就是为了告诉系统,类的属性和行为
oc类声明属性只能写在 { }
注意编写oc类属性时,将所有属性的名称前面加_
类名后面的NSObject为了让类具备创建对象的能力

@interface ClassName : NSObject
{
    code;
}
@end

类的实现

@implementation开头

@end结束

然后在class对应的地方写上声明时声明的类的名称

@implementation

    code

@end
私有成员
在@implementation声明的成员变量,默认为私有的成员变量,并且和利用@private修饰的不一样,在@implementation中定义的成员变量在其他类中无法查看,也无法访问
在@implementation中定义的私有变量只有在本类中访问
私有方法
如果只有方法的实现没有方法的声明,那么该方法就是私有方法
在OC中没有真正的私有方法,因为OC是消息机制

OC中定义一个方法分为两个
(void)about;
C语言中的函数也分为两种:内部函数和外部函数
OC中也为分为两种:类方法和对象方法
类方法只能用类名调用
对象方法只能用对象调用,也就是指针
- 类方法用 “ + ” 表示
- 对象方法用 “ - ” 表示
//类方法
+ (void)fun1;
//对象方法
- (void)fun2
OC中的方法如果有参数,那么每个参数的数据类型前面必须加一个 “ : ”
注意:当前这个函数的方法,它的名字是 fun: 和fun:: ,是两个不同的函数
- (int)fun:(int)number;
- (int)fun:(int)number:(char *)content;
为了提高我们的阅读性,OC方法允许我们给每个参数添加标签,来说明当前函数的含义
- (void)sendMessageWithNumber:(int)number andContent:(char *)content;
此时方法的名字就是 sendMessageWithNumber:andContent
如果不想每次使用方法都需要创建对象开辟存储空间,并且方法中没有使用到属性,那么就可以把这个方法定义为类方法
对象方法和类方法的区别
1.对象方法必须用对象来调用,类方法必须用类来调用
2.对象方法中可以直接访问成员变量,类方法不可以
3.调用类方法的效率会比调用对象方法高
4.类方法和对象方法可以相互调用
    a.对象方法可以直接调用类方法
    b.类方法可以间接调用对象方法,创建对象,但是不要使用
    c.类方法可以调用类方法,对象方法可以调用对象方法
5.类方法一般定义工具方法

类的本质##

类其实也是一个对象,这个对象会在这个类第一次被使用的时候创建
只要有了类对象,将来就可以通过类对象来创建实例对象
实例对象中有一个isa指针,指向创建自己的类对象

类对象保存了当前对象所有的对象方法
当给一个实例对象方法消息的时候,会根据实例对象中的isa指针去对应的类对象查找


如何通过一个类来创建对象##

在oc中想要通过一个类来创建一个对象,必须给类发送一个消息
[类名称/类名对象 方法名称]

[ClassName new]

调用 new 可以创建一个对象
只要通过类调用new的方法,也就是给类发送一个new消息

 1.为类创建出来的对象创建存储空间
 2.初始化类创建出来的对象的属性
 3.返回类创建出来的对象对应的地址

如果使用了指针保存了某一个对象的地址,称这个指针为某个类型的对象

    ClassName *p = [ClassName new];
[ClassName new];
[[ClassName alloc] init];
//两者作用一致

创建对象用后者,是一个编码规范


+ (void)load

在程序启动就会将所有类的代码加载到内存中,放到代码区
load方法就会在当前类被加载到内存的时候调用,有且仅会调用一次
如果存在继承关系,会先调用父类的load方法,再调用子类的load方法

+ (void)initialize

当当前类第一次被使用的时候就会调用(创建类对象的时候)
initialize方法在整个程序运行的过程中只会被调用一次,无论使用多少次这个类都只会调用一次
initialize用于对某一个类进行一次性的初始化
如果存在继承关系,会先调用父类的initialize方法,再调用子类的initialize方法

上一篇下一篇

猜你喜欢

热点阅读