黑马程序员 OC基础: 面向对象_封装(二)

来源:互联网 发布:动力系数静力计算法 编辑:程序博客网 时间:2024/04/29 10:29

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——

成员变量之前学习时一直在用的方法是这个样子的

@interface Student : NSObject{    @public    int age;}@end
 Student *stu = [Student new];//申请一个对象 stu->age = 20;

但是有缺陷!
缺点: 申明为 public 之后,只要知道成员名字,就可以通过指针任意改变其内容.这样是不安全的.

假想一下,假如你的程序被一个黑客干掉了.他通过这种赋值方法可以对你程序为所欲为…

为了避免此类郁闷的情况发生,我们应该追加一些保护措施.

即”封装”的思想.

首先,去掉 public 声明,让别人无法从外部肆无忌惮的修改成员变量

@interface Student : NSObject{    int age;}@end

在我们需要修改成员变量时,可以声明一个 set 方法

/*set 方法1提供一个方法给外界设置 参数值2.命名规范 1>方法名必须以 set 开头 2>set 后面跟上成员变量的名称,成员变量的字母必须大写 3>返回值一定是 void 4>一定要接收一个参数,参数类型跟成员变量一致 5>形参的名称不能跟成员变量名一模一样*/- (void)setAge:(int)newAge;
// 对输入的数据过滤,并修改成员变量- (void)setAge:(int)newAge{    if(newAge <= 0)    {        newAge = 1;    }    age = newAge;}

这样一来,想要修改变量是,别人就必须按照我们规定的方法来.
我们的主动权就更强.

同样,举一反三.有 就有 .

我们一样可以定义一个 get 方法

/* get 方法 1.作用:返回对象内部的成员变量 2.命名规范: 1> 肯定有返回值,且返回值与成员变量类型一致 2> 方法名必须是以 get 开头? 在oc 中方法名和成员变量名一致 3> 不需要接收任何参数 */- (int)age;
- (int)age{    return age;}

当我们想提供只读或者只写的功能时.一样,我们只提供 的方法就 ok 了

封装的思想大致就是如此

再补充其他一些学习记录


成员变量命名规范:

一定要以下划线 _ 开头

typedef enum{    SexMan,    SexWoman,} Sex;@interface Student : NSObject{/*    成员变量命名规范: 一定要以下划线 _ 开头   作用:   1.让成员变量和 get 方法的名称区分开  2.可以跟局部变量区分开,一看到下划线开头的变量,一般都是成员变量  */    int _no;    Sex _sex;}

类方法

类方法都是以+开头

@interface Person : NSObject+ (void)printClassName;@end@implementation Person+ (void)printClassName{    NSLog(@"这个类叫做 person ");}@endint main(){    [Person printClassName];  // 类方法调用    return 0;}

对象方法

 1> 减号 - 开头 2> 只能有对象调用

类方法

 1> 加号 + 开头 2> 只能由类调用

描述

实例变量不能在类方法中访问优点: 类方法效率高使用场合: 当方法内部不需要使用到成员变量时,就可以改为类方法.可能在设计工具类的时候较为常用

self 用法

self 的用途:
1> 概念: 指向了当前对象(方法调用者)
2> 可以利用 “self-> 成员变量名”访问当前对象内部的成员变量
3> [self 方法名];

self 是一个指向当前对象的指针.
通过第1>条我们可以了解.在类方法中的 self 依旧调用类方法,对象方法中的 self 依旧调用对象方法.这两个不会串了.

- (void)test{    //self : 指针 -> 指向当前对象    int _age = 20;    NSLog(@"Person's age is %d", self->_age);    // [self founction]}

即便是我们声明了_age 这样一个奇怪的变量.
只要用了 self 一指 -> 我们都可以找到成员变量 _age 而不受影响

归根结底,这玩意的存在是为了方便大家而存在的.
可以多试试举一反三的用法,今天有点困,吃不消了,先睡觉了.

0 0
原创粉丝点击