A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我的呸 中级黑马   /  2015-8-2 15:19  /  990 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

6.封装的概念
当一个类把自己的属性暴露给外部的时候,那么该类就失去对属性的管理权。
将数据隐藏起来,只能用此类的方法函数才可以访问或者设置数据,不可被外部任意存储是面向对象设计本质。降低了数据被无用的可能性!
在OC语言中,使用@interface和@implementation来处理类。
@interface就好像暴露在外面的时钟表面,像外界提供展示以及接口。@implementation就好像隐藏在时钟内部的构造实现,把具体的实现封装了起来。
实例变量默认只能被当前类的对象方法访问。
封装的实现步骤:
定义设置实例变量(setter)方法和访问实例变量(getter)的方法,也称设置器和访问器。
setter 设置器:
在开发过程中,考虑到安全性要求,我们一般不在成员变量名前面使用@public、@protected等关键字修饰,
而是使用Set方法来为对象提供成员变量的值。在set方法的内部也可以对一些不合理的赋值进行筛选过滤。
Set方法的作用:为外界提供一个设置成员变量值的方法。
命名规范:
(1)方法名必须以set开头
(2)Set后面跟上成员变量的名称,首字母大写
(3)返回值一定是void
(4)一定要接收一个参数,而且参数类型需要和成员变量的类型一致
(5)形参名不能和成员变量名一样(苹果官方推荐成员变量名前加_以示区分)
Set方法的好处:
(1)不让数据暴露在外,保证了数据的安全性
(2)对设置的数据进行过滤
@interface Person :NSObject{
int _age;
}
-(void)setAge:(int) age;
@end
set方法的实现
@implementation
-(void)setAge:(int)age{
_age = age;
}
@end

getter访问器:
Get方法的作用:为调用者返回对象内部的成员变量。
命名规范:
(1)一定有返回值,返回值的类型和成员变量的类型一致
(2)方法名和成员变量名一样
(3)不需要接收任何参数
@interface Person:NSObject{
NSString * _name ;
}
-(NSString *)name;
@end
get方法的实现
@implementation
-(NSString *)name{
return _name;
}
@end
(1)在实际的开发中,不一定set和get方法都会提供,如果内部的成员变量比如学生的学号这样的数据只允许外界读取,
但是不允许修改的情况,则通常只提供get方法而不提供set方法。
(2)成员变量名的命名以下划线开头,get方法名不需要带下划线,使用下划线开头有两个好处:
(1)与get方法的方法名区分开来;(2)可以和一些其他的局部变量区分开来,下划线开头的变量,通常都是类的成员变量。

10.方法重载的问题
方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的个数。
调用重载方法时,其他语言(Java、c++)编译器能通过检查调用的方法的参数类型和个数选择一个恰当的方法。
方法重载通常用于创建完成一组任务相似但参数的类型或参数的个数不同的方法。
OC中没有方法重载。
OC没有严格的方法重载.
在OC中,方法名不允许相同。

11.关于static关键字

static 修饰局部变量:延长布局变量的生命周期。
static 修饰全局变量:当前变量只能在当前文件中使用。
static 修饰函数:函数只能在当前文件中使用。
在OC中,static关键字:
在变量声明前加上关键字static,可以使局部变量保留多次调用一个方法所得的值。
变量为静态变量,位于程序的全局数据区。
若作全局变量,可将声明放在实现文件的开始部分。
使用static修饰实例变量是不被允许的,使用static修饰了方法,也是错误的。
可以定义全局变量。
可以定义局部变量和C语言一样,延长变量生命周期。
注意
static型全局变量的可见性,局限于当前.m文件。
其他的文件中的类,无法访问到该变量。




3 个回复

倒序浏览
谢谢总结,学习了
回复 使用道具 举报

谢谢总结,学习了
回复 使用道具 举报
很详细。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马