1.封装的目的:就是为了达到高内聚低耦合
内聚:模块各部分之间的关联程度
耦合:就是模块与模块之间的关联程度
内聚和耦合有一个条件改变必然导致另一个条件改变(耦合低了,内聚必然增高)(eg:甲乙两座城市的例子)
2.
@public 实例变量可见度修饰的修饰是变量的范围:从书写的哪一行开始到下一个修饰符结束,或者碰到大括号就结束
@protected 被保护的,被protected修饰的实例变量,只能在类的内部直接访问,和子类中直接访问;直接就是通过实例变量名类访问
@private 私有的。被private修饰的实例变量只能在类的内部直接访问,子类中也不可以访问
被protected修饰的实例变量不能在类的外部访问,这时需要给这些实例变量添加赋值的方法
总结 可见度修饰符 类的内部 子类
public 可以直接访问 可以直接访问
protected 可以直接访问 可以直接访问
private 可以直接访问 不可以直接访问
系统默认的实例变量可见度修饰符:@protected
@public修饰的实例变量虽然可以再类的内部和外部直接访问,但是他破坏了类的封装思想,所有以后(祥哥)建议不要使用
3.设置器set方法
设置器的书写格式:
a.对象方法 以 - 号开头
b.返回值类型一定是void
c.方法名一定以set开头,后面跟上实例变量去掉下划线,并且首字母大写
d.一定有参数,并且参数类型和实例变量的类型要保持一致,参数名就是实例变量去掉下划线
age
的set方法
NSInteger _age;
- (void)setAge:(NSInteger)age;
访问器 get方法
访问器的书写格式:
a.对象方法 以 - 号开头
b.一定有返回值,且返回值的类型要和实例变量的类型保持一致
c.方法名是实例变量去掉下划线
age的get方法
NSInteger _age;
- (NSInteger)age;
4.oc里的方法分为两种方法,对象方法 和 类方法
提取方法名的格式
a.无返无参去掉方法类型 (- +)
b.去掉返回值类型
方法名
sayHello
- (void)sayHello;
+ (void)sayHello;
有一个参数的对象方法和类方法
提取方法名
a.去掉方法类型 (- +)
b.去掉返回值类型
c.去掉参数类型和参数名
冒号是方法名的一部分不能省略
方法名
sayHi:
- (void)sayHi:(NSString *)name;
+ (void)sayHi:(NSString *)name;
+ (void)sayHi:(NSString *)name;
多个参数的时候,参数和参数名之间要加一个空格
有几个冒号代表这个方法有几个参数
runCicle : withCount :
- (void)runCircle:(NSString *)road withCount:(NSInteger)count;
+ (void)runCircle:(NSString *)road withCount:(NSInteger)count;
+ (void)runCircle:(NSString *)road withCount:(NSInteger)count;
5.
stu.name = @"尹君";//等价于==[stu setName:@"尹君"]
NSString *name = stu.name;//等价于==[stu.name]
点语法后面有赋值运算符(=)的时候调用的是实例变量的set方法
点语法后面没有赋值运算符(=)的时候调用的是实例变量的get方法
点语法只是系统提供一种快速调用set和get方法的快捷方式,只有写了实例变量的set和get方法才能使用点语法
6.类方法的好处和使用场合:不依赖与对象,执行效率高,能使用类方法解决的问题尽量使用类方法
7.自定义方法
好处:把初始化和对实例变量的赋值结合到一起
8.@class告诉编译器class后面的字符串是一个类,这时不会引入类的头文件,使用@class的好处可以防止重复引入头文件
#import ”Man“可以引入头文件,并且头文件之被引入一次
#include ”“这是c语言引入头文件的方法,他不会防止重复引用