------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
一、封装的定义:
封装是为了使 内部结构不要暴露在外。 之前所学的对成员变量的赋值是直接用对象访问@public的成员变量,因此可能会导致不合理的赋值,因此要使用方法来对外界的赋值进行监督,对 成员变量进行封装。封装的环境:外界对成员变量的赋值有时候会不合理,因此要提供一个方法给外界设置成员变量的值,对赋的值进行过滤。
二、set 方法:
1.作用:提供一个方法给外面设置成员变量的值,对赋的值进行过滤、监督,防止错误的赋值,以及满足一些客户的赋值要求。2 命名规范:
1> 方法名必须以set开头
2> set后面跟上成员变量的名称,成员变量的首字母必须大写
3> 返回值一定是void
4> 一定要接收一个参数,而且参数类型跟成员变量类型一致
5> 形参的名称不能跟成员变量名一样
如:set方法的声明: -(void)setAge:(int)newAge
set方法的实现:
- (void)setAge:(int)newAge
{
// 对传进来的参数进行过滤
if (newAge <= 0)
{
newAge = 1;
}
age = newAge;
}
如: [对象 SetAge:10] 表示将10赋值给_age
三、get方法:
1.除了赋值外可能还要访问成员变量,之前也是直接用对象直接访问。而oc也将此功能封装在get方法内。
2命名规范:
1> 肯定有返回值,返回值类型肯定与成员变量类型一致
2> 方法名跟成员变量名一样
3> 不需要接收任何参数
如:get方法的声明:-(int)age;
get方法的实现:
-(int)age
{
return age;
}
四、封装的好处:
实际是将赋值变为方法,把细节隐藏,保障数据的安全与封装;
如果某些成员变量只允许外界只读,则可对它只提供get方法。
set好处 :可以在输入时根据要求任意操作、监听, 实现客户要求的功能
五、注意封装的细节:
1.成员变量名的命名规范:一定要以下划线__开头,这与初学时的不太一样,以后要遵守这种写法。2.作用:
1>让成员变量和get方法的名称区分开
2>可以跟局部变量区分开,一看到下划线开头的变量,一般都是成员变量
六、弱语法:
实际上OC内部是c语言面向过程 ,而外部包装为面向对象。在用XCode进行编译时,会有一些无法识别的错误,只有在运行时才会出错,表现出了弱语法的一面,了解弱语法有利于以后开发过程中错误的避免与解决。
1.方法没有声明 没有实现,在调用此方法是,编译有警告链接不报错 但是运行报错 :消息不明
2.有声明,没有实现, 编译无错有警告链接无措
oc是在运行过程中才会检测对象有没有实现相应的方法
3.无声明有实现,可以实现一个对象的方法,是对的
七、类方法:
1. 在面向OC的方法可以分为对象方法、类方法。例如:Person *p=[Person new] 因为 Person是类,则new是类方法。[p eat]因为p是对象的指针,则eat是对象方法 以减号开头。
2.类方法和对象方法区别:
对象方法
1> 减号 - 开头
2> 只能由对象来调用
3> 对象方法中能访问当前对象的成员变量(实例变量)
类方法
1> 加号 + 开头
2> 只能由类(名)来调用
3> 类方法中不能访问成员变量(实例变量)这是因为成员变量就是实例变量,而只有类创建了对象成员变量才是实例,类不是实例化的,因此不能访问成员变量。
如:对象方法的声明: - (void)test; 类方法的声明 + (void)test;
3.类方法的好处和使用场合:
1> 不依赖于对象,执行效率高,有利于提高程序性能,如:不用创建对象而浪费时间
2> 能用类方法,尽量用类方法
3> 场合:当方法内部不需要使用到成员变量时,就可以改为类方法。如工具类:基本没有任何成员变量,里面的方法基本都是类方法
小结:
1> 可以允许类方法和对象方法同名
2>如果方法不使用成员变量,成为工具类,则可以使用类名完成功能,可以提高性能
3>同属于一个类的方法可以相互调用
4>对象方法 类方法可以相互调用
5.>注意死循环 类对象练习