黑马程序员 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 而不受影响
归根结底,这玩意的存在是为了方便大家而存在的.
可以多试试举一反三的用法,今天有点困,吃不消了,先睡觉了.
- 黑马程序员 OC基础: 面向对象_封装(二)
- 黑马程序员 OC基础: 面向对象_继承&多态(三)
- 黑马程序员_面向对象_封装
- 黑马程序员-IOS-OC基础-面向对象语法二
- 黑马程序员-IOS-OC基础-面向对象语法二
- 黑马程序员-OC语言基础:面向对象语法 二
- 黑马程序员_面向对象-封装
- 【黑马程序员】- 面向对象_封装
- 黑马程序员_面向对象---封装
- 黑马程序员_java面向对象_封装
- 黑马程序员_面向对象—>封装
- 黑马程序员_面向对象(封装)
- 黑马程序员_面向对象之封装
- 黑马程序员_Java基础_面向对象(二)_06
- 黑马程序员 OC基础: 面向对象(一)
- 黑马程序员————OC面向对象_三大特性之封装
- 黑马程序员_毕向东JAVA基础_面向对象(封装&继承&多态)
- 黑马程序员——OC语言基础:面向对象三大特性,封装、继承、多态
- 枚举
- XML的特殊字符
- 数据仓库学习(1)
- onvif2.5 core spec
- 浮动元素居中显示
- 黑马程序员 OC基础: 面向对象_封装(二)
- Codeforces 500E. New Year Domino 倍增/线段树+离线
- 用重写HandleMessage
- linux 常用命令
- 判断二叉树是否为平衡二叉树
- hdu 5072 Coprime(单色三角形问题+容斥原理)
- 结构体定义 typedef struct 用法详解和用法小结
- 关于C++ const 的全面总结
- 【转】gdb调试器用法