C语言是基于过程的一种编程语言,而OC语言是基于对象的一种语言。

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:];
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,实例化出实体之后,实体就可以调用类的实例方法,也就是前面带减号的方法。具体使用如第三句到第十三句。

运行时输出如下:

 -- ::48.330 getAndSet[:]
-- ::48.331 getAndSet[:] 98.50
-- ::48.332 getAndSet[:] haungweiqiang
Program ended with exit code:
												

IOS开发-ObjC-对象、封装的更多相关文章

  1. iOS开发拓展篇—封装音频文件播放工具类

    iOS开发拓展篇—封装音频文件播放工具类 一.简单说明 1.关于音乐播放的简单说明 (1)音乐播放用到一个叫做AVAudioPlayer的类 (2)AVAudioPlayer常用方法 加载音乐文件 - ...

  2. iOS开发-网络-合理封装请求接口

    概述 如今大多App都会与网络打交道,作为开发者,合理的对网络后台请求接口进行封装十分重要.本文要介绍的就是一种常见的采用回调函数(方法)的网络接口封装,也算的是一种构架吧. 这个构架主要的idea是 ...

  3. iOS开发之自己封装一个progressHUD控件

    看了几个轻量级的progress view 我觉得KVNProgress做的最漂亮吧 突然我想为什么我自己不封装一个控件 然后我研究了一下KVNProgress KVN简单的界面是由storyboar ...

  4. iOS开发之自己封装的提示框(警告框)样式BHAlertView

    最近需要使用到提示框(警告框)进行信息的展示和提醒,所以进行了一个类的封装,想用Swift调用此OC文件,但是发现有些困难,所以暂时先把OC代码进行展示,随后再好好研究一下在Swift中的使用. 对于 ...

  5. IOS开发基础知识碎片-导航

    1:IOS开发基础知识--碎片1 a:NSString与NSInteger的互换 b:Objective-c中集合里面不能存放基础类型,比如int string float等,只能把它们转化成对象才可 ...

  6. IOS开发基础知识--碎片19

    1:键盘事件顺序 UIKeyboardWillShowNotification // 键盘显示之前 UIKeyboardDidShowNotification // 键盘显示完成后 UIKeyboar ...

  7. 文顶顶iOS开发博客链接整理及部分项目源代码下载

    文顶顶iOS开发博客链接整理及部分项目源代码下载   网上的iOS开发的教程很多,但是像cnblogs博主文顶顶的博客这样内容图文并茂,代码齐全,示例经典,原理也有阐述,覆盖面宽广,自成系统的系列教程 ...

  8. iOS开发UI篇—核心动画(UIView封装动画)

    iOS开发UI篇—核心动画(UIView封装动画) 一.UIView动画(首尾) 1.简单说明 UIKit直接将动画集成到UIView类中,当内部的一些属性发生改变时,UIView将为这些改变提供动画 ...

  9. 解析iOS开发中的FirstResponder第一响应对象

    1. UIResonder 对于C#里所有的控件(例如TextBox),都继承于Control类.而Control类的继承关系如下: 代码如下: System.Object System.Marsha ...

  10. iOS开发之微信聊天工具栏的封装

    之前山寨了一个新浪微博(iOS开发之山寨版新浪微博小结),这几天就山寨个微信吧.之前已经把微信的视图结构简单的拖了一下(IOS开发之微信山寨版),今天就开始给微信加上具体的实现功能,那么就先从微信的聊 ...

随机推荐

  1. PAT (Advanced Level) 1094. The Largest Generation (25)

    简单DFS. #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> ...

  2. (一)、Struts第一天

    (一).Struts第一天 1. JavaWeb知识回顾 n 客户端编程 HTLM/CSS/JS n XML技术 会写XML * 基本语法 * DTD * Schema 会读XML * Dom4J读取 ...

  3. thinkphp整合系列之rbac的升级版auth权限管理系统demo

    权限管理基本是作为网站的标配了: 除非是像博客这类个人使用的:否则权限管理的重要性不言而喻: 今个就来写写auth权限管理: thinkphp已经内置了auth权限类位于:/ThinkPHP/Libr ...

  4. 开源企业管理软件 ONES

    ONES 不是 ONS,基于AngularJS + ThnkPHP开发的企业管理系统平台,名字可以理解为ONES is a Niubility ERP System 或者 ONES Notonly a ...

  5. 为什么我的Android SDK Manager中只显示已安装的package?

    如图.在菜单packages中,前两项我都是选了的 . 两种可能: 1. 明显是楼主连不上谷歌的更新服务器了,换成国内的吧,左上Tools-->Options弹出的界面有两个可以填写的 ,下面一 ...

  6. javascript 中 apply(或call)方法的用途----对象的继承

    一直以来,我的理解就是  js中的Function.apply(或者是Function.call)方法是来改变Function 这个函数的执行上下文(excute Context),说白了,就是改变执 ...

  7. tabBarItem动画

    1.有时,我们需要为tabBarItem设置一些动画.在网上查了半天,没有结果.自己写了一个简单的动画 代码如下: - (void)tabBarController:(UITabBarControll ...

  8. HashSet 与HashMap底层实现

    1. HashSet底层通过包装HashMap来实现,HashSet在添加一个值的时候,实际上是将此值作为HashMap中的key来进行保存. 2. HashMap的底层实现是通过初始化化一个Entr ...

  9. Django之路: 基本命令与网址进阶

    一.Django 基本命令 温馨提示:如果你想学习Django,那么就请您从现在开始按照笔记记录一步一步的用手把代码敲出来,千万不要偷懒哦..... 1.创建一个Django project djan ...

  10. 在Delphi中使用C++对象(转)

    源:http://blog.csdn.net/henreash/article/details/7352335 Delphi是市场上最好的RAD工具,但是现在C++占据着主导地位,有时针对一个问题很难 ...