IOS学习三:Objective-C的扩展OOP,类别,内存管理等
其实自己也不知道这些概念怎么写,总不能直接从书上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动态运行时的分配机制,你可以为现有类添加新的方法,嘿,这
听起来很酷!(书上原话)
类别创建:
@inte易做图ce NSString(NumberConvenience)
-(NSNumber *)lengthAsNumber;
@end//NumberConvenience
声明有两个特点:
(1)现有的类位于@inte易做图ce关键字之后,其后是位于圆括号中的类别名称。类别名称是NumberConvenience,而且该类别将向NSString类中添加方法。换句话说:“我们向NSString类中添加一个名称为NumberConvenience的类别。”同名类别有唯一性,但是可以添加任意多的不同名类别。
(2)可以执行希望向其添加类别的类以及类别的名称,还可以列出添加的方法
不可以添加新的实例变量,类别生命中没有实例变量部分。
类别的实现基本和一般类的实现一样。
非正式协议和委托:非正式协议概念其实就是类别的另一种表达方式“这里有一些你可能希望实现的方法,你可以使用他们更好的完成工作”。
这个意思是,这些是可选的。比如我门要一个更好的方法,我们就会申明一个这样的类别去实现。然后你在后期可以直接使用这些更好的方法。
这么看,总觉得类别这玩意儿有点像协议的可选协议。
可选协议只不过是有先见之明,类别是后期补救。共同一点时,对于方法实现都是可选的。可选协议有关键optionnal申明了,类别则你像高效方法你就申明,
不想就算了。
之后是委托,算OC中一个很重量级的概念。据说深入后会发现很多东西,主要鄙人目前还只接触几天,对于它在oc中整体的设计模式理论还是不太了解。
只是在写例子代码时,怎么看怎么觉得就如java中的监听和回调。可能要更好的理解,那还是要更多的接触代码才能会有个深刻的理解。
四:内存管理的改变
只所以说内存管理的改变,是以前一直说c和c++成员的在工作中最需要注意的问题就是内存管理。
在接触ios5.1前,网上看了大部分资料,内存管理都有很重要的戏份。
只是,当我学习时,发现,这块被淡化了。
现在版本的新特性引入了ARC机制。感觉完全变的和java一样了。
在创建项目选者ARC选项后,你会发现在代码中你根本不用手动去释放内存了。release什么都被划掉了 = =。
不知道这算时好事还是坏事。可能对于我们新手来说,哇。。方便了好多。
作者:Nono_Love_Lilith
补充:移动开发 , 其他 ,