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

——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 ");
}
@end

int 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值