用已经建立的知识学习一门新的知识,有的时候会事半功倍,但有的时候也会适得其反,因为我们已有的知识跟新知识可能相似,也可能有一些概念上的冲突,在javascript的博文中,我已经说了我的感受。
冲突的东西当我理解了,那就叫做进步,我们无法用已有的知识一步走到死,因此要经常的吸收一些外来的新鲜血液。
一些概念,思想和现有知识不太一样的东西,我在学习初期可能比较困难,有的时候搞的自己情绪波动不稳定,还反而的问自己,是不是自己学不会这个东西,怎么在这个知识面前像个白痴,不怕学不会,就怕不学,认真对待,坚持一段时间就没有
这种想法了。我也用java和C#这样的举过例子,因为这两个很类似,因此只会其中的一个,学另外一个花不了多少时间,但是这是让入门,如果深入的话,那还需要更多的时间,学习是少不了以时间为代价的。
明天就除夕了,今天在这里看着IOS,虽然说在坚持,但是效率低下,看几句,歇一歇,还不断的斜视电脑右下角的时间,心里不断的念叨“还没下班,今天会不会早走”之类的话。
无论忙也好,闲也罢,今天就让自己轻松点,只希望2013年有所获,有所得。
IOS开发用的是Object-c简称OC,是在C语言的基础上扩展起来的,加入了面向对象的东西,我们知道还有一个语言也是如此,我知道你知道的C++,因此很多学习OC的语言都会从发展史说起,其实了解这个发展史是很有意义的,
我们可以知道那个时代都有那些东西,以及那个时候这些东西的功能,用现在知识去判断当时的东西是否完善,缺少什么等?
OC中没有模板,没有多继承,没有private方法,没有内联函数,没有virtual关键字等。OC中的协议相当于C#中的Interface,而Interface相当于c++中的类,.m文件相当于c++中的.cpp文件,委托相当于C#中的委托,OC中的集合却只能容纳对象,OC中对象的构造分了两部,
没有和C#/java中类名相同的构造函数一说,而是可以返回一个id类型的东东,现在我们看OC中的协议和委托吧。
以下内容来自:http://blog.csdn.net/jacky_jin/article/details/7004013
协议,就是使用了这个协议后就要按照这个协议来办事,协议要求实现的方法就一定要实现。
委托(代理),顾名思义就是委托别人办事,就是当一件事情发生后,自己不处理,让别人来处理。
1. 同时用到协议及委托
有两个类,一个是控制器类,一个是view类
当用户操作view时,需要通知控制器,让控制器去处理一些逻辑时,需要用到委托及协议
controller.h
#import "view.h"
@interface Controller:NSObject<TestDelegate>{
View* _view;
}
@end
controller.m
@implement
-(void) viewDidLoad
{
view =[ [View alloc] init];
view.delegate = self; //这里用到委托,意思就是View把事情交给Controller去处理。 体现出MVC的思想
}
// View 其实并没有实现testMethod1及testMethod2, 在这里实现
-(void) testMethod1
{
//deal logic
}
-(void) testMethod2
{
//deal logic
}
view.h
@protocol TestDelegate
-(void) testMethod1
-(void) testMethod2
@end
@interface View:NSObject{
id <TestDelegate> delegate;
}
view.m
#implement
// 处理view上的一些用户事件
-(void)OnAction1
{
[delegate testMethod1];
}
-(void)OnAction2
{
[delegate testMethod2];
}
@end
2. 单独用到协议
可以看一下NSObject类,这是所有objectc 类的基类,它实现了<NSObject> 协议
当有一个类NSString* str;
可以[str retain];
retain 就是NSObject协议里指定的一个方法,而并不是NSObject类的成员方法
我相信在NSObject类里有
-(id) retain
{
// some code
return self;
}
NSObject类会去实现这个方法,因为这个方法是NSObject协议里规定的。
学过C++的人 会有所体会这里的协议 有点像C++里的抽象类。这样是否会有助于理解?