我的iOS开发之Objective-C第2天之面向对象特性之封装
来源:互联网 发布:js鼠标移上去图片放大 编辑:程序博客网 时间:2024/04/29 19:03
1、封装的定义:
即隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和行为(或功能)相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成“类”,其中数据和函数都是类的成员。
举一个例子吧
Student.h
声明类,我们通常放到.h的头文件中
声明类使用关键字 @interface
#import <Foundation/Foundation.h>@interface Student : NSObject{ //@private 私有成员,只有当前类可以访问; //@protected 受保护成员,只有当前类或子类可以访问(如 //果没有添加任何修饰则默认为@protected); //@public 公共成员,所有类均可访问; //实例变量 @public NSString *name; int age;}//实例方法(减号方法)-(void)sayHi;//类方法(加号方法)+(void)sayHi;@end
Student.m
实现一个类 使用关键字:@implementation
实现一个类通常放到.m的文件中
实现类主要是对方法的具体实现
#import "Student.h"@implementation Student//方法的实现-(void)sayHi{ NSLog(@"我叫%@ 今年%d岁 ",_name,_age);}+(void)sayHi{ NSLog(@"我是一名学生");}@end
main.m
#import <Foundation/Foundation.h>#import "Student.h"int main(int argc, const char * argv[]) { @autoreleasepool { //通过new或者alloc init创建一个对象 Student *stu=[Student new]; Student *stu1=[[Student alloc] init]; //对public实现变量,可以直接访问进行修改 //对于protected以及private访问可用setter,getter方法,后面细说 stu->_age=22; stu->_name=@"lvdonghui"; //方法的调用 [Student sayHi]; [stu sayHi]; } return 0;}
运行结果
2015-08-12 09:49:07.073 St[752:39725] 我是一名学生
2015-08-12 09:49:07.075 St[752:39725] 我叫lvdonghui 今年22岁
2、setter,getter方法
方法的声明
-(void) setName:(NSString *) name;-( NSString *) name;
方法的实现
-(void)setName:(NSString *)name{ _name=name;}-(NSString * )name{ return _name;}
在main.m中使用
Student *stu=[Student new]; //调用方法访问实例变量 [stu setName:@"吕冬辉"]; NSLog(@"%@",[stu name]);
也可以使用点语法
stu.name=@"吕冬辉"; NSLog(@"%@",stu.name);
2、对象的存储细节
上面的例子中stu就是对象,Student就是类
类创建对象,每个对象在内存中都占据一定的存储空间,每个对象都有一份属于自己的单独的成 员变量,所有的对象公用类的成员方法,方法在整个内存中只有一份,类本身在内存中占据一份 存储空间,类的方法存储于此。
3、初始化方法
- 便利初始化
-(Student *)initWithName:(NSString *)name Age:(int)age{ if (self = [super init]) { self.name=name; _age=age; } return self;}
- 便利构造器
+(Student *)studentWithName:(NSString *)name Age:(int)age{ return [[Student alloc] initWithName:name Age:age];}
3main.m中运用
Student *stu=[Student studentWithName:@"吕冬辉" Age:22]; [stu sayHi];
结果:
2015-08-12 13:06:21.527 St[952:70940] 我叫吕冬辉 今年22岁
0 0
- 我的iOS开发之Objective-C第2天之面向对象特性之封装
- 我的iOS开发之Objective-C第3天之面向对象特性之继承、多态
- Objective C(OC)面向对象三大特性之:封装
- 黑马程序员--IOS基础--Objective C学习--面向对象特性之--封装
- Objective-C基础学习笔记(三)-面向对象的三大特性之封装
- 第三天面向对象之封装特性
- 我的iOS开发之Objective-C第8天之ARC&&类目
- 我的iOS开发之Objective-C第1天之NOlog以及BOOL
- 我的iOS开发之Objective-C第4天之属性、复合
- 我的iOS开发之Objective-C第7天之MRC
- 我的iOS开发之Objective-C第5、6天之Founcation
- iOS开发入门教程之Objective-C · 面向对象的Objective-C
- IOS开发之路-Objective-C 面向对象编程基础
- 【iOS开发之Objective-C】面向对象编程--间接
- 面向对象特性之封装
- iOS笔记之Objective - c 面向对象概念的解释
- 【IOS 开发学习总结-OC-11】★objective-c面向对象之——封装和访问控制符
- 我的iOS开发之Objective-C第8天之延展和协议以及深浅复制
- 深入分析C++引用
- 使用jquery操作session
- Bit Manipulation - Bitwise AND of Numbers Range
- 【SpringMVC整合MyBatis】validation校验-商品修改校验
- hdu 1085 面值为1.2.5的硬币不能组成的最小面值
- 我的iOS开发之Objective-C第2天之面向对象特性之封装
- javascript代码是否有保密性?
- oracle中查看用户权限
- JSON的三种解析方式
- 破解时常用的汇编指令
- http请求部分常见的状态码
- easyui 窗口的onBeforeClose 使用
- 字符串哈希函数
- 教你如何绘制圆形头像