OC整理1
关于面向对象
看起来简单,好好体会其实有点深奥,初学的时候更感觉抽象,可能由于开发经验不足的关系吧,很难体会到面向对象的精髓。
放轻松,我们来用最直白得方式来探讨一下面向对象。
首先,编程是为了用计算机解决现实生活中的问题,或者模拟各种游戏情景提供娱乐。
面向过程编程是一种思维——知道做一件事的具体步骤,按流程一步一步的执行,致力于问题解决的具体实现步骤。
而我们今天要提起的面向对象也是一种思维方式——是一种模拟人类行为,思考的方式寻求最直接的途径解决问题。
为了说明这一点呢,我们一起来看看我们如何用面向过程和面向对象的方法分别解决开店的事件。
开店喽,用面向过程的方方法(典型中国人的方式:亲力亲为):租店铺,装修,买设备,顾员工,管理员工等。
但是呢,用面向过程的方法(外国人的方式):顾一个店长用来管理员工,店长再顾各种员工,中介来租房子,装修团队装修,采购员负责采购等。
看起来很杂乱的事情被分化得井井有条,哪里出问题直接找做这件事的人就可以。如果又需要一个管钱的,店长只需再请一个会计。分工明确,每分工作之间的关联很小。
面向对象的关键在于快速找到一个会解决问题的对象帮忙解决问题;
面向过程的关键在于遇到问题着关注解决问题的具体步骤。
看得出来用面向对象的方式用于编程,能使我们的程序方便维护,满足不断拓展的需求。
到此为止,我们应该已经了解到面向对象是一种模拟现实生活中对象间处理问题的简便的思维方式;并且用面向对象编程能使我们的程序更加健壮。
接下来我们来一起谈谈面向对象编程的一些相关术语:类,对象,实例变量,方法,消息
编程的过程:说白了就是模拟现实世界在计算机上模拟出一个虚拟的世界,大家很多都玩游戏也很享受那个虚拟的游戏世界,我不玩游戏,但是我本身也特别喜欢看这方面的电影。要模拟一个我们的虚拟世界,在这个世界中,我们就是创造者,我们会为人物分类,魔术师,剑士等。这些人物类别都有自己的生命特征,外形特征,最重要的是它们都有自己的技能。我们勾画了魔术师这一类人的全部共同特征,技能。到目前为止,魔术师只是一群具有共同特征的人物的统称,我们要用我们设计的这个魔术师的形象来创造出一个个魔术师,魔术师A,魔术师B,魔术师C。A,B,C才是一个个真正施展技能的角色,而魔术师只是一个统称,是我们的一个设计人物框架,在编程中我们用“类”表示;用这个“魔术师类“创建出来的A,B,C是我们编程当中的“对象”——一个个有独特特征,技能的实在角色。我们在魔术类中,描述了这个类应该具有的特征,技能,所以按照这个类创建出来的魔术师对象都具有这些特征,技能。这些特征我们称之为“实例变量”,技能我们称之为“方法”。某个具体的魔术师角色发动技能,我们称为“发送消息调用方法”。
勾画这个魔术师类的过程,我们称为类的设计封装。
那我们来设计一个。
魔术师(Magical)类:特征(身高,性别,生命值)技能(冰封,无中生有,天女散花)
接下来呢,我们就可以在XCode上创建这么一个类,步骤略。创建出来的Magical类有两个文件.h和.m文件。
.h是一个声明文件:实力变量的声明需要在{}中声明,方法的声明;如何实力变量声明,方法声明,步骤略。
.m是一个实现文件:对声明的方法的实现,方法有(+ \-)两种方法,+称为类方法,-方法称为实例方法(对象方法)。类方法类调用,对象方法对象调用;方法实现略。
有了类,我们需要用我们的魔术师类创建出3个魔术师对象A,B,C;
类比于生活中的按照草图建房子,我们需要圈地才能建房,然后为建起的毛坯房初始装饰一下,暂时住人;而在计算机中内存就是我们的地,我们要让计算机给我们分配空间来创建对象,为这个毛坯对象初始化一下。
alloc 对应内存分配以及为所有的实例变量赋系统默认值占据内存。接下来呢init初始化一下各个实力变量。
总之,[[Magical alloc]init];还有另一种方式[Magical new];new 封装了alloc和init方法;
关于初始化,这是一个必须详细说明的关键点。
我们班都是男生,我现在有一个学生类(有性别,名字),学生有性别这个实例变量,我要创建学生对象调用初始化init的时候,学生的性别还是系统默认的‘\0’,当然我们可以创建学生对象后一个个赋值男生;
但是如果我要是能在创建的同时都把性别初始化成男生,不就更省事儿了吗!
要实现这样的功能,我们就需要重写init方法,在init方法中把性别这个实例变量赋值为男生就可以了。
接下来呢 ,我们又考虑到名字怎么办呢,每个学生的名字是不用的如果用这种初始化设置默认值的形式,不就每个学生的名字都一样了吗,所以呢,为了解决这样一个问题,OC提供了便利初始化函数,供我们在初始化的时候传入独特的值。
又提供了便利构造器封装了便利初始化函数,更加方便快捷的调用。
便利构造函数和便利构造器都是初始化出独特的对象的方法。关于命名是有规范的,便利构造函数,实例方法命名要以initWith开头,便利构造器,类方法命名以类名开头(类名首字母小写);
总结:关于面向对象,我们着重于面向对象编程:即类的封装,对象的创建,以及实力变量的使用,方法的调用;
类的创建封装,是基础,也是面向对象的重点难点,在实际的开发过程中会凸显出来,而初学者反而困扰在方法的调用和运行的流程。
需要注意的细节:
初始化函数的命名规范;
困扰人的概念:类方法和实力方法的调用;
OC整理1的更多相关文章
- IOS开发-OC学习-常用功能代码片段整理
IOS开发-OC学习-常用功能代码片段整理 IOS开发中会频繁用到一些代码段,用来实现一些固定的功能.比如在文本框中输入完后要让键盘收回,这个需要用一个简单的让文本框失去第一响应者的身份来完成.或者是 ...
- oc界面开发整理
oc界面开发整理 ViewController.h from test82 #import <UIKit/UIKit.h> @interface ViewController : UIVi ...
- 我收录整理的优秀OC技术类文章
自定义导航按钮UIBarButtonItem 关于导航栏的六个小技巧 ios开发的一些小技巧篇一 制作一个可以滑动操作的 Table View Cell - IOS - 伯乐在线 一个 ...
- OC调用Swift 整理步骤!总结别人的!方便自己查找!
1. 2. 上面的修改了一个配置项,有一个Product Module Name在后面会使用. 在工程里面点击File/New/File…,选择iOS/Source/Cocoa Touch Class ...
- OC测试错误整理
3. NSDictionary *dict = [NSDictionary dictionaryWithObject:@"a value" forKey:@"aKey&q ...
- OC开发_整理笔记——友盟分享(社交化组件)
0.友盟的地址 http://dev.umeng.com,进入友盟,在使用友盟之前我们需要注册账号获取key (1 进入我们的产品,添加新应用 (2 输入信息,然后就会获取到key 1.选择社会化分 ...
- OC开发_整理笔记——多线程之GCD
一.进程和线程 二.各种队列! 1.GCD:Grand Central Dispatch 2.串行队列(Serial) 你可以创建任意个数的串行队列,每个队列依次执行添加的任务,一个队列 ...
- oc语言基础整理
objc.h---------------- typedef struct objc_class *Class; struct objc_object { Class isa OBJC_ISA_AV ...
- iOS 常用三方类库整理
iOS 常用三方类库整理 1:基于响应式编程思想的oc 地址:https://github.com/ReactiveCocoa/ReactiveCocoa 2:hud提示框 地址:https://gi ...
随机推荐
- 51nod1134(最长递增子序列)
题目链接: https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1134 题意: 中文题诶~ 思路: 直接暴力的话时间复杂度为 ...
- javascript面向切面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 【Java远程debug】
转自 http://blog.csdn.net/hongchangfirst/article/details/44191925 一.远程debug原理 Java远程调试的原理是两个JVM之间通过deb ...
- oracle对/dev/shm的使用
查看共享内存打开的文件数 [root@db2 ~]# lsof -n | grep /dev/shm | wc -l 34693 共享内存中总共文件数 [root@db2 ~]# ls -l /dev ...
- 2016ACM/ICPC亚洲区大连站-重现赛(感谢大连海事大学)(7/10)
1001题意:n个人,给m对敌对关系,X个好人,Y个坏人.现在问你是否每个人都是要么是好人,要么是坏人. 先看看与X,Y个人有联通的人是否有矛盾,没有矛盾的话咋就继续遍历那些不确定的人关系,随便取一个 ...
- java中的小数的取整的几种函数
Math类中提供了5个与取整相关的函数,如下所示: static double ceil(double a):天花板函数,返回大于等于a的最小整数(但是以浮点数形式存储). static double ...
- 识别网络应用所使用的协议Amap
识别网络应用所使用的协议Amap Amap是Kali Linux自带的一款信息收集工具.工作时,它首先向服务器的端口发送内置的触发包(tirgger),然后获取响应.通过分析响应包数据,来识别该端 ...
- ViewPager+Fragment取消预加载(延迟加载)(转)
原文:http://www.2cto.com/kf/201501/368954.html 在项目中,都或多或少地使用的Tab布局,所以大都会用到ViewPager+Fragment,但是Fragmen ...
- Code Complete 笔记—— 第一章
软件的构建的主要流程: 定义问题 ( Problem Definition) 需求分析 (Requirements Development) 规划构建 (construction planning) ...
- volatile不能保证原子性
1.看图自己体会 2.体会不了就给你个小程序 package cs.util; public class VolatileDemo { private volatile int count =0; p ...