对象,是面对对象程序的核心
面对对象三大特征:继承,封装,多态
OC中的类:类可以是任意的事物,是具有相同特征的事物
这里要注意:在OC中NSObject是所有类直接或者间接的父类
- 类的声明和实现:
- 类的声明:(成员变量 + 成员方法)
成员变量的声明(成员变量默认都是受保护的@protected)
a) 在大括号里面写成员变量的属性时所遵循的规则:
1 以下划线开头
2 遵循驼峰原则(首个单词字母小写,后面单词首个字母大写)
3 不能与关键词重名
b) 直接用@property进行声明:不需要写set和get方法,会自动展开成setter和getter的声明,会自动生成一个带下划线的成员变量
nonatomic:为原子操作,效率快
copy:修饰字符串
assign:修饰基本类型
retain:修饰对象
readwrite(默认) 生成set和get方法 读写
readonly:只生成get方法
- 方法的声明:
对象方法: -(void)方法名(void); 需要创建对象来进行调用,可以直接访问成员变量
类方法:+(void)方法名(void); 直接用类名来进行调用,不可以直接访问成员变量
void为没有返回值没有参数,可以自行修改,但是如果有参数,那么每个参数的数据类型前面必须加上一个":",冒号也是方法名的一部分
类方法的优点:调用类方法的效率会比调用对象方法高
- 对象方法和类方法可以进行相互调用
- 对象方法中可以直接调用类方法
- 可以在类方法中间接调用对象方法(木木不建议这样做哟~)
- 类方法中可以直接调用其他类方法
- 对象方法中可以直接调用对象方法
类方法一般用于定义工具方法:字符串查找,文件操作,数据库库操作
注意:类方法中不能直接使用成员变量,但是可以创建对象后,用对象去调用对象方法,或者间接访问成员变量. 在OC中的方法,如果没有形参不需要写( ),而是直接写一个“;”。因为OC中的( )有特殊的用途,OC方法中的( )是用来括住数据类型的
类的实现:(所有在.h中写过的方法都在要.m中实现一遍,从父类继承过来的不用)
对象
对象是某个类的具体化,对象一定一定要初始化才能有大小,有内存,才能存储数据(木木最开始学的时候经常忘记初始化对象,导致各种bug~,要注意啦!!)
对象的创建:创建对象,为对象分配存储空间的同时初始化成员变量
对象和对象指针,这两个要分清楚 。
比如:Student *stu = [[Student alloc] init] 创建了一个对象类型的指针指向对象 [[Student alloc] init] 为对象 ,stu为对象指针
OC中的类其实本质就是一个结构体,所以stu这个指针其实就是指向了一个结构体方法的调用:
对象方法的调用: [对象 对象方法名] self 代表的是当前对象
类方法的调用:[类名 类方法名] self代表当前类
注意啦!! 类是没有大小的,不能存储数据!
对象是有大小的,可以存储数据,但是一定要初始化 0
类中实例变量的权限和常用方法:
实例变量权限:
@public:公有的,外部(main函数)中可以直接访问,在本类和子类中也可以访问
@protected(OC中缺省默认):受保护的,在外部(main函数)中不可以直接访问,在本类和子类中可以访问
@private:私有的,在外部以及子类中都不可以访问,只能在本类中访问-
常用方法:
init(构造函数):set和get方法: set:用于修改/设置成员变量; get用于获取成员变量值 给set和get方法起别名:@property (nonatomic,assign,setter=setMyHeight:) CGFloat height description(重写方法):打印对象时调用这个方法: - (NSString *)description { return [NSString stringWithFormat:@"name == %@ age == %ld",_name,_age]; } 点语法:(本质就是方法的调用,转换成相应的set和get方法,id类型不能使用点语法) 单例方法:通过单例创建的对象永远只有一个 ,static 静态局部变量,保证变量的唯一性和持久性
如何在方法里面调用其他方法:
实例方法里的self和super:super用于调用父类方法的关键字,self指向向前对象或者当前类的指针
>注意:.h中声明,.m中实现的方法可以在main函数中调用,也可以在本类中用self调用
但是在.h中没有声明,却在.m中实现的方法不可以在main函数中调用,只能在本类中用self调用
这里木木列举一些之前遇到过的常见错误,有需要的可以看一下
1 只有类的声明,没有了的实现
2 漏了@end
3 @interface和@implementation嵌套
4 成员变量没有写在括号里面
5 方法的声明写进了大括号
6 成员变量不能在{}中进行初始化,不能被直接拿出去访问
7 方法不能当做函数一样调用
8 OC方法只能声明在@interface和@end之间,只能实现在@implementation和@end之间,也就是说OC方法不能独立于类存在
9 C函数不属于类,跟类没有关系,c函数只归定义函数的文件所有
10 C函数不能访问OC对象的成员
11 低级错误:方法有声明,但是实现的时候写成了函数
12 OC可以没有@interface,同样也是可以定义一个类的
仅供木木学习,以及有需要的伙伴们阅读~可转载,不可复制粘贴哟~