IOS开发-ObjC-对象、封装
2016-03-21 18:31
477 查看
C语言是基于过程的一种编程语言,而OC语言是基于对象的一种语言。
C是和其他的面向对象的语言的区别在于C语言更注重地层操作,思维方式相比面向对象的语言而言更接近机器的思维方式,而面向对象的语言更接近于人的思维方式。
人的思维方式就是对不同的事物进行分类,比如人类、鸟类等等,人类中又细分出男人,女人,或者从另一个角度来说分为好人和坏人。这就是类,把有相同属性的事物归为一类。
以人类为例,人类中每个人都有年龄、身高、体重、姓名、性别等,这写东西就是人类的属性,而人类还有一些共同的能力,比如吃饭、喝水、走路、跑步、学习、睡觉,这些就是人类的方法。在面向对象的语言中,我们把现实世界抽象成各种各样的类,而这各种各样的类也就具有各种属性和方法。所以说,类是属性和方法的集合,也就是说,对类可以定义如下;
类:父类{
属性1;
属性2;
属性3;
。。。。
方法1;
方法2;
方法3;
}
具体在OC中是怎么通过程序定义的呢?以定义人类为例(类的定义放在@interface和@end之间):
其中第一行@interface是定义类的说明,man是我们要定义的类,而:后面的NSObject是指man类的父类,在OC中,NSObject是所有类的父类。什么是父类呢?如果有一个类是学生,另一个类事大学生,我们就可以理解为大学生属于学生中的一种,也就是说学生是大学生的父类,亦即大学生是学生的子类。这样的概念以后在OC中会经常用到,所以必须理解透彻。
第二行到第四行{}中的是man这个类具有的三个属性-年龄、成绩、姓名。定义方式如C语言中,数据类型+空格+变量名;
既然一个man类有年龄,那么如果从2014年到2015年,这个man的年龄,也就是age就会相应增加一岁。man类每次考试的成绩都会变化,还有有可能man类会改名,这样的话我们就需要改变这个类的以上三种属性的值,那么怎么修改呢?以上程序段的第七行和第八行就是用来修改man类的属性的值和访问man类的属性的值的。也就是给属性设置值和获取属性的值,即set方法和get方法。
方法在C语言中也就是所谓的函数,就是能实现一定功能的程序段,在这里-(void)setAge:(int)age;这句的意思就是给man类的属性_age设置一个值,其中(int)age就是要设置的值,也就是这个方法(C语言中的函数)的参数。而setAge也就是这个方法(函数)的方法名(函数名)。前面的(void)就是这个函数的返回值。但是(void)前面还有一个—号,这个—号是什么意思呢,就是说这个方法是个实体方法,具体什么是实体方法以后再阐述,现在只要按照这个格式来写方法就行。同理,-(int)Age就是读取这个age属性的值的一个方法,通过它我们可以知道这个man的年龄是多少。也就是说它要返回一个int型的数给调用这个方法的对象。第十,十一,十三,十四行是同样的道理。
以上程序段只是一个类的声明,是写在类名.h的文件中的,类的实现如下:写在类名.m文件中:
类的实现需要使用#import“类名.h”文件,如在man.m的第一行就是#import "man.h",然后是对man.h中定义的方法的实现。
当一个类完成定义(声明)和实现,接下来我们就要在Main中使用这个类,具体如下:
先在main.m中包含头文件 man.h,然后使用man * xiaoqiang =[[man alloc] init];这句实例化出一个man的实体,这个实体的名字叫做xiaoqiang,实例化出实体之后,实体就可以调用类的实例方法,也就是前面带减号的方法。具体使用如第三句到第十三句。
运行时输出如下:
C是和其他的面向对象的语言的区别在于C语言更注重地层操作,思维方式相比面向对象的语言而言更接近机器的思维方式,而面向对象的语言更接近于人的思维方式。
人的思维方式就是对不同的事物进行分类,比如人类、鸟类等等,人类中又细分出男人,女人,或者从另一个角度来说分为好人和坏人。这就是类,把有相同属性的事物归为一类。
以人类为例,人类中每个人都有年龄、身高、体重、姓名、性别等,这写东西就是人类的属性,而人类还有一些共同的能力,比如吃饭、喝水、走路、跑步、学习、睡觉,这些就是人类的方法。在面向对象的语言中,我们把现实世界抽象成各种各样的类,而这各种各样的类也就具有各种属性和方法。所以说,类是属性和方法的集合,也就是说,对类可以定义如下;
类:父类{
属性1;
属性2;
属性3;
。。。。
方法1;
方法2;
方法3;
}
具体在OC中是怎么通过程序定义的呢?以定义人类为例(类的定义放在@interface和@end之间):
@interface man : NSObject{ int _age; float _score; NSString* _name; } -(void)setAge:(int)age; -(int)Age; -(void)setScore:(float)score; -(float)Score; -(void)setName:(NSString*)name; -(NSString*)Name; @end
其中第一行@interface是定义类的说明,man是我们要定义的类,而:后面的NSObject是指man类的父类,在OC中,NSObject是所有类的父类。什么是父类呢?如果有一个类是学生,另一个类事大学生,我们就可以理解为大学生属于学生中的一种,也就是说学生是大学生的父类,亦即大学生是学生的子类。这样的概念以后在OC中会经常用到,所以必须理解透彻。
第二行到第四行{}中的是man这个类具有的三个属性-年龄、成绩、姓名。定义方式如C语言中,数据类型+空格+变量名;
既然一个man类有年龄,那么如果从2014年到2015年,这个man的年龄,也就是age就会相应增加一岁。man类每次考试的成绩都会变化,还有有可能man类会改名,这样的话我们就需要改变这个类的以上三种属性的值,那么怎么修改呢?以上程序段的第七行和第八行就是用来修改man类的属性的值和访问man类的属性的值的。也就是给属性设置值和获取属性的值,即set方法和get方法。
方法在C语言中也就是所谓的函数,就是能实现一定功能的程序段,在这里-(void)setAge:(int)age;这句的意思就是给man类的属性_age设置一个值,其中(int)age就是要设置的值,也就是这个方法(C语言中的函数)的参数。而setAge也就是这个方法(函数)的方法名(函数名)。前面的(void)就是这个函数的返回值。但是(void)前面还有一个—号,这个—号是什么意思呢,就是说这个方法是个实体方法,具体什么是实体方法以后再阐述,现在只要按照这个格式来写方法就行。同理,-(int)Age就是读取这个age属性的值的一个方法,通过它我们可以知道这个man的年龄是多少。也就是说它要返回一个int型的数给调用这个方法的对象。第十,十一,十三,十四行是同样的道理。
以上程序段只是一个类的声明,是写在类名.h的文件中的,类的实现如下:写在类名.m文件中:
#import "man.h" @implementation man -(void)setAge:(int)age{ _age = age; } -(int)Age{ return _age; } -(void)setScore:(float)score{ _score = score; } -(float)Score{ return _score; } -(void)setName:(NSString*)name{ _name = name; } -(NSString*)Name{ return _name; } @end
类的实现需要使用#import“类名.h”文件,如在man.m的第一行就是#import "man.h",然后是对man.h中定义的方法的实现。
当一个类完成定义(声明)和实现,接下来我们就要在Main中使用这个类,具体如下:
man * xiaoqiang =[[man alloc]init]; [xiaoqiang setAge:12]; int ageNumber = [xiaoqiang Age]; NSLog(@"%d", ageNumber); [xiaoqiang setScore:98.5]; float scoreNumber = [xiaoqiang Score]; NSLog(@"%.2f", scoreNumber); [xiaoqiang setName:@"haungweiqiang"]; NSString* nameCode = [xiaoqiang Name]; NSLog(@"%@", nameCode);
先在main.m中包含头文件 man.h,然后使用man * xiaoqiang =[[man alloc] init];这句实例化出一个man的实体,这个实体的名字叫做xiaoqiang,实例化出实体之后,实体就可以调用类的实例方法,也就是前面带减号的方法。具体使用如第三句到第十三句。
运行时输出如下:
2016-03-21 17:40:48.330 getAndSet[5372:223159] 12 2016-03-21 17:40:48.331 getAndSet[5372:223159] 98.50 2016-03-21 17:40:48.332 getAndSet[5372:223159] haungweiqiang Program ended with exit code: 0
相关文章推荐
- duplicate symbols for architecture x86_64原因及解决办法
- iOS数据 - Core Data使用
- IOS 关键字self,super,copy, retain, assign , readonly , readwrite, nonatomic、@synthesize、@property、@dyna
- iOS 判断第一个字符是数字还是汉字
- iOS 懒加载
- iOS中正则表达式的使用
- iOS 基础之NSArray数组去重
- iOS沙盒 -- 文件对接器(NSFileHandle)
- iOS知识 ----加载显示gif图片
- iOS开发中 修改状态栏颜色 或者隐藏状态栏颜色
- iOS开发的经典博客和文章汇总
- iOS 自定义的对象类型的解档和归档
- iOS-设计模式
- iOS 数据的归档(NSKeyedArchiver )与数据的解档(NSKeyedUnarchiver) 加密 提高安全性
- iOS udid+keychain 唯一标示
- IOS平台开发实战培训
- iOS小知识
- iOS开发调试技巧总结
- iOS开发中的手势添加
- iOS压缩图片大小