IOS学习三:Objective-C的扩展OOP,类别,内存管理等

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 16:14 点击:

其实自己也不知道这些概念怎么写,总不能直接从书上copy吧,那还不如买书了,这多累。
对于一些抽象的概念,一般都是大师写的。比如那本可以当枕头的java编程思想。那真的是思想啊。1遍过后绝对跟看小说似的,模模糊糊。
而抽象着东西并没有什么很好的定义,因为它无法定义。
真正的理解,可能还是要我们自己的时间和积累。

这会儿我业余学习ios一周,目前红柚子那本刚好边看边实践到选取器有关的那部分。
我虽有做笔记,但我的笔记基本只带几个关键字。
几天的代码例子实践下,因为现在的开发环境时sdk5.1+xcode4.3.2,无论时xcode下的分布的项目文件结构,nib,storyboarder,arc机制,变化还是挺大的。
就结合oc基础罗嗦下。

一:OOP思想,面向对象这个概念性东西大家应该都有。
什么继承,封装,多态这些就跟背单词一样。但是,简单的还是需要用大白话能说出来的。
先说封装:封装我觉得其实是oop思想最原始的一个基础。封装的引入后,才能衍生出对象这一概念。我们把一个物体和它拥有的属性和更能包装起来,是一个抽离然后融合的过程。
继承:继承从字面句很好了解,儿子继承父亲。一个物体派生出一个新的物体。当然,继承后的很多特性,你可以背书去。
多态:多态其实更好解释了,听字面,多种形态?一个事物的多种实现(当然,这个可能很直观很字面,但是从严谨性上来说是错误的)因为一个物体的多种实现,怎么
看怎么听都是像继承啊,比如我有个鱼类,那么我可以派生一个鲨鱼类和一个鲸鱼类,那对于这个做法来说,感觉是继承啊。其实他们的本质思想都是差不多的,
只是侧重点的不同。继承更像表达一个物体派生一个新物体,多态则是一个物体派生出多个物体对改物体的不同实现,这个实现最直接的方式就是对超类中方法的不同的覆写和实现。比如鱼类,有个eat()方法,派生的鲨鱼类,我们都知道鲨鱼吃肉,那么我们可以实现鲨鱼的eat方法是吃肉的,蓝鲸我们算他杂食吧,那么蓝鲸的eat方法则是实现杂食吃法。此时你就可以站在一个全面的角度简单的看到多态这个概念了。
对于深入理解OOP这个思想定义,其实就类似于看你对待事物抽象的高度。
二:新事物的或者说一个新类产生的集中方式。
1.最原始得一种,就是我们自己抽象定义除一个类。比如定义最原始的类,在java和OC中都存在这样一个原始类Object。
2.继承而来派生出一个新类。这个很好理解。比如从人类Human衍生出男人类 Man,
3.还有一种是我们比较少明确意识到,但是其实是很常用到方法:复合,既用几个不同的类来复合成一个新类。最常用就以书上例子解释 ,Car 汽车类,
简单我们可以用Engine引擎和Tires轮子来构造成最简单的Car模型。

三:OC中类别和非正式协议概念
1.category,类别应该算是OC独有的一个术语,书上给类别的定义是:一种为现有类添加新方法的一种方式。
其实这个方式怎么听怎么像创建子类就可以做到的概念。
是的,为一个类做扩展,我们最常想到的方法就是为其创建一个子类,然后添加你需要扩展的新方法等。
但是在OC中有时这样并不方便,书上举例了一个NSString的例子。原话是这样的:
/**********
当希望为新有类添加新的行为时,我们通常会创建子类。
但是有时子类并不方便。例如,你可能会希望为NSString类新增一些新行为,但是你知道,NSString实际上只是一个类簇的前台表示,因而无法
为这样的类创建子类。省略1000字。
********/
好了,从上面我们基本知道,创建子类这个方法是有局限性的对吧。上面引入一个概念叫类簇。
字面意思(一簇鲜花,就是许多朵花扎成一束呈现出来,里面的具体其实我们是不知道的。)
鄙人也是新接触这玩意儿,里面有这么一句话:
/*****
类簇将一些私有的、具体的子类组合在一个公共的、抽象的超类下面。
****/
我不知道是不是可以理解。类簇包含的成分是带有私有性质的,但我们都知道,继承后的子类是不能访问父类的私有成员的(这个应该没错吧?)
那么我们在新创建的子类添加的新方法就无权限访问那些东西咯。
好吧,以上是个人理解,这东西也是听拗口的,具体详情可以参考更多官方文档。
那么,好了,我们大体上知道OC引入类别这个机制的原因了。配合上OC动态运行时的分配机制,你可以为现有类添加新的方法,嘿,这
听起来很酷!(书上原话)
类别创建:
@interface  NSString(NumberConvenience)
-(NSNumber *)lengthAsNumber;
@end//NumberConvenience
声明有两个特点:
     (1)现有的类位于@interface关键字之后,其后是位于圆括号中的类别名称。类别名称是NumberConvenience,而且该类别将向NSString类中添加方法。换句话说:“我们向NSString类中添加一个名称为NumberConvenience的类别。”同名类别

    相关新闻>>

      发表评论
      请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
      用户名: 验证码:点击我更换图片
      最新评论 更多>>

      推荐热点

      • Lexical or Preprocessor Issue 'xxx.h
      • ios学习笔记(二)xcode 4.3.2下实现基本交互
      • ios版本的helloworld
      • iphone(object-c) 内存管理(3) 有效的内存管理 前半部分
      • ios学习笔记(一)xcode 4.3.2下创建第一个ios项目
      • UITableView一些方法
      • IOS类似iphone通讯录TableView的完整demo【附源码】
      • [iPhone中级]iPhone团购信息客户端的开发 (二)
      • iphone(object-c)内存管理(1)
      网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
      Copyright © 2008-2015 计算机技术学习交流网. 版权所有

      豫ICP备11007008号-1