ios开发技术分享,ios 开发
ios 判断有没有实现代理协议
【iOS开发技术分享】协议与代理
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名注册、虚拟主机、营销软件、网站建设、东湖网站维护、网站推广。
【iOS开发技术分享】协议与代理
一、理解协议与代理
协议:
协议是一个方法签名的列表,在其中可以定义若干个方法。根据配置,遵守该协议的类会去实现这个协议中规定的若干个方法。
代理:
代理是一个概念,很难用一个名词去定义(如我们可以说协议其实就是一个方法列表)。它更像是一种关系,我要做某一个事情,但我自己不想去做这件事,我委托其他人帮我去做这件事。这个时候,这位其他人就是我的代理。
二、协议的使用
在定义协议时,可以通过@required与@optional来配置遵守这个协议必须去实现的方法和可以选择的方法。譬如:
@protocol MyChooseDayViewDelegateNSObject
@required
- returnChooseDay:(id)myChooseDayView;
@optional
- hideThisView;
- changeDateFormatter:(NSString*)formatString;
@end
在定义的协议 MyChooseDayViewDelegate中,如果遵守该协议,就必须实现协议中的- returnChooseDay: 方法,同时可以根据实际程序要求去实现- hideThisView 与 - changeDateFormatter: 。
同时,协议支持对本身的一种扩展,譬如:
@protocol MyChooseTimeViewDelegate MyChooseDayViewDelegate
- doSomething;
@end
MyChooseTimeViewDelegate
扩展了MyChooseDayViewDelegate这个协议,也就是说,假如遵守了MyChooseTimeViewDelegate的话,也必须实
现MyChooseDayViewDelegate中的方法(@required)使用分类的话,就是在定义类的头文件中使用
将所需要的协议引入,如果引入多个协议,用","分隔,譬如:
@interface MyClassView:UIViewController MyChooseDayViewDelegate, UIAlertViewDelegate
//TODO: balabalabala...
@end
想要检查某个类是否实现了某个协议或者某个类是否实现了某个协议的方法,可以通过以下方式来进行测试
//获取某个对象
MyClassView *myClassView = xxxxxxx;
//判断该对象是否实现了MyChooseDayViewDelegate协议
if([myClassView conformToProtocol:@protocol (MyChooseDayViewDelegate)]){
//TODO: balabalabala...
}
//判断对象是否实现了某个方法就用我们经常会使用到的
if([myClassView responseToSelector:@selector(xxxx)]){
//TODO: balabalabala...
}
三、代理
代理在iOS开发会被经常使用,而且代理的使用往往配合着协议。我重复一次我对他的理解,我要做某一个事情,但我自己不想去做这件事,我委托其他人帮我去做这件事。
举例来说,我在办公室里正在写代码,突然发现口
很渴像喝瓶冰百事,但下楼是件麻烦的事情,我不愿意下楼。这个时候我想起小卖部可以商品加价2元就外送到家服务,我就打电话给小卖部,委托小卖部给我送一
瓶水上来。这个时候,小卖部就是我的代理,我委托他帮买水并送上来。这个例子中小卖部是我的代理,商品加价2元外送到家服务就是商品买卖协议(这个叫法肯
定不是最佳的,姑且这么叫吧)中的一个方法。
不要觉得麻烦,我们再最后理一遍,小卖部遵守商品买卖协议,我让小卖部成为了我的代理,代替我完成了买瓶冰百事的事情。
以iOS开发的角度来说,UIViewController想使用一个tableview,需要遵守UITableviewDataSource,UITableViewDelegate这2个协议,同时设置tableview的代理为自身,才可以完整的实现Table。
四、代理与协议的使用
我尽可能的用代码来进行描述,但首先需要进行一些context铺垫
我想实现的功能:我要自定义一个View,这个
view可能展示了我自己项目中特定的一些信息,它可能是若干控件的组合,譬如UITextField、UISwitch、UIDatePicker、
balabalabala...我们姑且叫这个view为myInformationView 我在一个ViewController使用了这个
view,为了方便,这个ViewController就叫myRootViewController。在使用这个myInformationView
时,我需要即时的在myRootViewController获取并做相应的处理。这是我想实现的功能。
接下来,就是开始写代码的时刻:
1.首先是一个protocol
#import Foundation/Foundation.h
@class MyInformationView;
@protocol MyInformatioViewDelegateNSObject
@required
@returnValueToShow:(MyInformationView*)myInformationView;
@end
2.MyInformationView
#import UIKit/UIKit.h
@interface MyInformationView : UIView
@property (nonatomic, strong) idMyInformationViewDelegate myDelegate;
- (id)initWith......//初始化视图的方法
//所需要的属性和方法根据实际需要再行添加
@end
#import "MyInformationView.h"
@interface MyInformationView()
@end
@implementation MyInformationView
@synthesize myDelegate = _myDelegate;
//Todo: 处理一些初始化方法和其他一些事件
// changeMyInformationData 是操作此view可能产生的数据变动。它可能是选择器变动、点击按钮等等,但我们并不想在此view处理它,因为它的变动可能对调用此view的controller造成影响,所以...
- (void) changeMyInformationData:(id)sender
{
//TODO:数据变动....
if ([self.myDelegate respondsToSelector:@selector(returnValueToShow:)]) {
[self.myDelegate returnValueToShow:self];
}
}
@end
3.ViewController
这里就不写代码了,在头文件中声明此类遵守MyInformationViewDelegate协议。在实现文件(.m)中,调用MyinfomationView的时候,设置代理成自己,
MyInformation *myInfoView = [[MyInformation alloc] init.......];
myInfoView.myDelegate = self;
然后实现协议中要求实现的方法
- (void)returnValueToShow:(MyInformationView*)myInfoView
{
//TODO:做想做的事情
}
如何快速学会ios开发
篇一:分享简单学习iOS开发的方法
随着3G技术的普及与智能终端的快速发展,逐渐的移动开发者最受企业的欢迎,特别是iOS软件开发人才更是得到了企业的青睐,从现在情况来看,iOS培训和iOS软件开发人才有些严重供不应求。
容易上手的,学习iOS要注意到每个细节,因为每个细小的知识都有可能改变这个程序,如果有一点的错误都会导致整个程序无法运行,其实学习iOS和上学学习一样,都是从最基础的开始学起,慢慢的积累知识。如果想学好iOS,现在单单在网上学习是有点out了,可以选择零学费,就能够入学的培训学校学习一下,如果没有合适的话,可以了解一下培训机构,找一个口碑不错的,这样结合理论和实际才能够学好iOS。
在课前一定要做好准备资料及准备内容,要知道老师要讲什么?先做好预习,这样有准备的上战场才会学得更好,在课堂上认真听老师讲课,在电脑上操作老师所讲的内容,如果有不懂的一定要及时向讲师问清是怎么回事,课后多做几次练习,那么就不是问题了。3
如果听不懂怎么办?
这些现象很正常,谁也不敢保证讲师所讲的知识都能够无一不漏的听明白,能够在电脑上操作出来,那么如果遇到不懂得就要直接问,还可以先预习今后再去学习理论课的时分就能够有对于性的去听了,教师讲到你现已把握的内容时,你能够注意听一下讲师是不是有了新的见解及创新的认识、讲的和你了解到的是不是一样,如果不太一样的话,那么就要做下记号,课下与老师沟通,承认这个
常识点的真实意义;若是讲到你预习时不会的常识点的话,你更大概仔细的去听了,认真的去了解一下到底是怎么个意思?
篇二:如何快速学会ios开发
针对学习iOS开发怎么样?想学iOS开发如何才能快速学习?没有基础怎么快速学习iOS开发等问题,蓝鸥iOS培训专业老师指点明灯!看着身边学iOS开发的人拿了高工资,很多人按捺不住了。但菜鸟真的也可以成为iOS开发软件工程师吗?只要有恰当的学习方法,学习软件开发并不难。对于软件初学者来说,主要做到以下几点:
一、打好基础,不能一步登天
学习iOS,首先要学习C语言,很多人跳过C,直接学Objective-C,这是极不可取的。Objective-C是C的超集,必须有C的基础,学习才能更好更快的进行。不要一开始就盲目崇拜别人的大项目,要从小项目开始,一步一个脚印,遇到困难不要退缩,解决困难也是学习的过程。
二、必须如蜜蜂,多方采集花蜜
在学习初期对于iOS没有概念,最好的办法就是多看别人的代码,多吸取别人的养分。遇到不懂得问题不要跳过,而是要多问,多向人请教,学习别人的思路,吸取有益的知识,并做好学习笔记。积少成多,会成为你不小的财富。
三、勤动脑,多动手,有创新精神
软件开发者是为了让软件实现更丰富更强大的功能,必须有很强的实际操作能力。作为iOS开发工程师,不但要了解用户需要哪些功能,有哪些需求,还要多动脑,开发出符合市场以及时代需求的项目。这都需要软件开发者具备很好创新精神。
由此可见,学习iOS开发,只要肯吃苦,有恒心,菜鸟也可以有很蓝,很广阔的天空。iOS培训很注重基础教学,教学方式与大学不同,在教授理论知识的同时,更注重实践技能的培养。摆正心态,切勿操之过急,囫囵吞枣,将每天所学定义为就是今后工作要用的,这样你便会认真对待每一次学习、每一行代码和遇到的每一个难题。
参加iOS开发培训也可以,现在iOS开发培训大概也就4个月时间,花一两万系统学4个月也是一个不错的选择,虽然要一两万,但是效果跟自己学肯定是不一样的,要是自己学跟有老师带着学一样,那这个世界上将没有学校存在了。对于参加iOS开发培训的一定
要选对机构,有句话说得好,选对比选好有时候重要太多。你考30分的'成绩让你去北大清华也不一定能够成就了呢,所以选择口碑好的机构,专注iOS开发的机构比较好,毕竟咱基础不好,那些机构做杂很难做精。不管是快速学还是慢慢自学还是选择iOS培训机构系统培训,只要你投入进去就好,坚持下去一定会有大收获。不管做什么或者学什么一定要避免三天打鱼两天晒网,这样效果不会明显。
篇三:零基础学iOS开发的方法
怎么学习iOS开发,尤其是对于没有基础的,甚至是0基础的朋友而言,要学习iOS开发就需要注重方法了。由于iphone手机带来的手机应用狂潮,现在很多人都希望从事这块的开发。很多初学者可能会问,没有基础怎么样才能学好iOS开发,我们要看什么书呢,还是什么视频,其实这些都不是重要的,重要的是,你认为自己可以学好iOS开发,认为自己可以坚持下来,这是关键啦。
其实学很多语言都是通的,即使0基础学习也不怕,从C语言入门,因为iOS开发用的是OC语言,是在C基础上的,不过也跟C不是很搭界,你可以直接学习OC语言也可以,还有开发工具是用Xcode,是在Mac系统的,你多摸索一下就可以开发简单的应用了,建议你买一本iphone开发秘籍第二版看看。学语言,无非就是要学好基础,弄清楚概念,然后做个简单的例子,慢慢的体会,基础打好了,到后面你会觉得突然自己提高了很多,很多东西都自然而然地明白了,在黑暗中的努力是为了迎接光明。
我觉得学iOS开发,首先心态要好,不要想着我已经学习很长时间了,可以找个好工作,可以赚钱了,牛人除外,不过大多都是普通人。
先慢慢培养兴趣下定决心,然后开始找资料,找视频,查百度。等你觉得这些基础的都差不多理解了,那就别看书,将精力集中于界面开发、一定的数据库开发、通讯接口开发、协同开发与联调。然后自己设计个东西,可以涵盖他们的,做个自己想做的东西出来,虽然可能很难,但是你会在过程中学到很多,是别人教不会你的。
在学习过程中遇到什么问题,你可以百度一下看看别人的回答,看多了印象就深了,也就慢慢掌握了。遇到什么思路上的问题,可以来蓝鸥网站技术论坛发帖,论坛肯定会有人来帮忙的,就算不能完全解决,也可以提供点参考。学习要会利用资源,论坛上那么好的资源不用可惜的哦,还有资料堆的东西,只要你能掌握70%,不相信你可以试试。
有没有自学 iOS 开发的一些经验
基础
一定的编程经验
这里说的编程经验是至少熟练一门编程语言,对 OOP 有一定的了解,最好熟悉一些基本的设计模式。遇到过的好多 iOS 开发,大多是从别的语言转过来的,所以有一定的编程基础,学起来会更容易 get the point.
如果是第一次接触编程,当然也是没问题的,只是要做好心理准备,可能会比想象的难。
英语
发现不少开发对于英语似乎有点接受不能,通常都是中文优先,除非迫不得已,才硬着头皮看看 StackOverflow,英文文章,文档等。忘了是谁说过「难走的路越走越好走」,通常如此。其实只要稍微 push 一下自己,那些技术文章啃下来应该不会有太大的问题,有过几次成功的体验后,这种恐惧感就会减少很多。优质的文章、视频、书籍,多是英文的,不迈过这个 坎,将来要么成为瓶颈,要么花更大的成本去填补。
入门
书籍
要学习 iOS 开发,自然要先学 Objective-C (当然现在也可以直接上 Swift,不过如果多人协作的话,OC目前还是主流),因为 OC 是 C 语言的超集,所以了解 C 语言对于学习 OC 肯定会有帮助,不过就算不了解,直接学 OC 也没太大问题。
这里推荐 BNR (Big Nerd Ranch) 的这本 Objective-C Programming The Big Nerd Ranch Guide,讲解地比较细致,能帮助你更好的理解 OC,更重要的是教你遇到问题时,如何去解决问题,以及这个问题对应的一些知识点,如何使用文档等等。
来到一个新的世界,肯定会对这个世界充满好奇,想订阅一大堆博客,买一堆书,看各种教程和视频,然后就变得浮躁,不知该从哪下手,这会导致拖延症。 我渴了,给我倒一杯水,这个很直接,马上就可以做,但如果是给我买一瓶饮料,而自己对那些饮料又不怎么熟悉时,就纠结了,不如刷会微博,看看朋友圈,玩个小游戏先。
所以一本好的入门教材很重要,要契合自己当前的水平,且常常会有收获,这种成就感会激励着你继续学下去。
在看书的过程中,往往会有这样的经历:书中提到某个人、观点、知识点、书、文章,然后就顺着它提到的这些东西出去了,可能某个知识点又牵扯到另一些内容,然后就这样越走越远。想起了一个故事——
三只猎狗追一只土拔鼠,土拔鼠逃跑时钻进了一个树洞。这个树洞只有一个出口,不一会儿,忽然从树洞里跑出一只兔子。兔子飞快地向前跑,并爬上另一棵大树。兔子因为慌乱在树上没站稳,掉了下来,砸晕了正仰头看的三只猎狗,最后,兔子终于逃脱。
对于这个故事可以从不同的角度去解读,我更愿意以初心去解读。兔子为什么会爬树?为什么能砸晕三只猎狗?这不是重点,重点是,之前追赶的土拨鼠哪去了?看书时难免会有延伸阅读,这个深度我觉得不宜超过 2 层,不然很容易就回不来了。
还有就是如果有可能,最好每天都看点,这其实是很难的,因为总是会有优先级更高的事,或者之前的某些习惯在干扰。一旦断了几天,就不想再拿起来了。
还有,苹果官方的 Start Developing iOS Apps Today 也是很不错的入门材料。
视频
推荐斯坦福老头子(Paul Hegarty)的 Developing iOS 7 Apps for iPhone and iPad ,当初也是看的这个(那时还是更老的版本),Paul 是资深的 Mac/iOS 开发(前苹果员工?),很多知识点讲得很到位,学生们的提问也大都在点上,同时配有Demo,总之听下来会对 iOS 开发有比较全面的了解。
同时推荐一本小册子:objc-zen-book,花不长时间就能看完,里面是一些 Best Practices,对于编写优质代码会很有帮助。
笔记
这是一个持久的过程,任何阶段都适用。以前也没太在意这个,觉得概念性的东西,脑子过一遍,就大概知道了,然后就去啃其他的东西了,现在看来,如果有记笔记的话,会更有助于消化概念、知识点,也可以记录自己的思考过程。达芬奇就记录了10000多页的笔记。
记笔记可以加深对知识点的理解,而成为编程巨星的唯一秘诀就是:对所做的事情理解地越深,就会做得越好。同时如果遵循遗忘曲线去复习的话,效果更佳。对知识点了解地足够透彻后,Debug 时才更有可能知道问题出在哪,解决问题也更容易有思路。
笔记不仅可以记知识点,也可以记录调试过程,比如这篇笔记,有一种调试方法:小黄鸭调试法
许多程序员都有过向别人(甚至可能向完全不会编程的人)提问及解释编程问题,就在解释的过程中击中了问题的解决方案。一边阐述代码的意图一边观察它实际上的意图并做调试,这两者之间的任何不协调会变得很明显,并且更容易发现自己的错误。
生活中我们可能不会真的这么去做,这时抽离出另一个自己,记录下跟ta的对话,也是个发现问题的好方法。
练习
这也是一个持续的过程,知道了些概念或原理后,总是会想着去验证下是不是这样,无论结果是否如自己预期,实践的过程会降低对语言的陌生感,慢慢地培养一种驾驭这门语言的自信,如果出了错,正好可以重新梳理一下。
目标
如果静下心来看完了 BNR 的这本书,以及斯坦福的 iOS 开发视频,那么对 OC 应该比较了解了,一些常用的 UIKit 用起来也没什么问题了,比如 UIViewController / UIView / UIScrollView / UIImageView / UITableView。也熟悉一些概念,如 KVO / MVC / Delegate / DataSource。
这个阶段下来,应该会有:哦,iOS 开发也就这样嘛,多翻翻文档,熟悉 Cocoa Touch 的一些 Class,差不多也能做出一个简单的 App 了。
进阶
入门之后,接下来可以折腾的东西还会有不少。
书籍
Effective Objective-C 2.0,里面提到了 52 种提高 iOS App 质量的途径。涉及了 API 设计、protocols / category 的使用、写出更模块化的代码等,读下来应该会有不少收获。
iOS Programming: The Big Nerd Ranch Guide (4th Edition),又是一本 BNR 的书,这本书的特点是通过 Demo 来引出知识点,然后提一些问题,并且会细说解题思路。看书的过程中,对于元学习能力的提升也会有一定帮助。
--- update ---
发现巧哥的 iOS开发进阶 已经可以在京东买到了,虽然没有细看,但巧哥出品质量肯定有保障。
其他资源
进入这个阶段后,可以去探索更大的世界了,现在的资源已经很丰富了,但还是要遵循「少而精」的原则。以下是我觉得挺不错的资源
iOS Dev Weekly 每周一期,内容多为这一星期里值得关注的Github项目、文章、工具等。
iOS 移动开发周报 这是唐巧大大整理的每周不错的 iOS 开发相关的内容,多为中文。
RayWenderlich 很多详细又全面的教程,不容错过。
iOS Dev Slack 国内不少 iOS 开发(包括大大们)都在这里,不过现在好像不怎么能拿到邀请了。
中文 iOS/Mac 开发博客列表,打开工具订阅吧。
还有,如果可能的话,多去分享自己学到的东西,教是最好的学,我试过几次,效果真的很不错。
目标
这个阶段下来,对于常用的设计模式、内存管理、Blocks 的使用、图像操作、网络请求和管理、多线程应该比较熟悉了。对于 CALayer、Animation、UIScrollView、UITableView、UICollectionView、 ViewController Container 则非常熟悉,对「非常熟悉」的定义是:不打开 Xcode,脑子里就能把相应的知识点复述出来 80% ,比如这个类有哪些方法,Delegate / DataSource 有哪些方法,怎么使用,如果要实现某个效果,应该怎么做(好吧, UICollectionView 除外)。
高级
其实高级、进阶、入门并没有严格的界限,在入门阶段也可以探究高级阶段的一些东西。我觉得支撑我们不断探索和前进的动力不是兴趣,而是永不满足的好奇心,和对优雅代码的追求。
If your standards are low, you're going to stop pretty early on in the process.
BNR 的这篇 Leveling Up 已经讲得很好了,也更加细致。
书籍
iOS 7 Programming Pushing the Limits 这本书对 iOS 7 的一些特性会讲解地比较深入,当然也不仅仅是 iOS 7。只叹 iOS 更新实在太快,书籍往往跟不上,一本好书往往需要很长时间来撰写,等书可以出版了,iOS 又出新版本了。
源码
看优秀的源码,可以学到很多东西,使用过程中遇到问题也更容易解决。这些是我觉得值得细看的源码:AFNetworking(NSOperation, HTTP, Block), SDWebImage(Image Handle, Cache, NSOperation, Block),SVPullToRefresh(UIScrollView, State Handle), JSONModel(runtime)
如果有兴趣,也可以翻翻 CoreFoundation / OC runtime 的源码。
资源
oleb
NSHipster
objc.io || objcio.cn
WWDC 视频
工具
chisel Facebook 出品的 LLDB 助手,用于调试很方便
Reveal 每当好奇某个 App 的实现时,都会打开它一窥究竟,用于调试自己的 App 也很方便
Aspects steipete 大大出品的一款方便使用 method swizzling 的工具,可以在运行时动态添加代码到某个方法
class-dump 从 Mach-O 文件生成 OC 头文件,有时想看看某个 App 大概是如何组织的会比较方便
Hopper 可以对二进制文件进行反编译,甚至可以生成伪代码!有时想看看 UIViewController 里某个方法大概是怎么实现的,就可以用它。
Instruments 这个内置的工具对于发现 App 的各种问题很有帮助,如内存占用、泄露,渲染问题等。
目标
这个阶段,对于底层的实现会有更深入的了解,各种 Core 开头的 Framework 至少可以说出个大概,工具也能熟练使用,「正经的代码」写过数万行,可能天天在翻 Dash。如果别人让你实现某个功能,能在较短的时间内给出不错的实现方案,并且足够细致,甚至精细到如何使用 Core Graphic 去画某个图像。
其他
我觉得无论学习什么,「速成」的心态是最要不得的,这只会让自己变得浮躁,一知半解,整个过程也很难让自己的元学习能力得到提升。慢慢来,攻占一个城后,再去打下一个,这时心态也会平和许多。
本文名称:ios开发技术分享,ios 开发
文章出自:http://azwzsj.com/article/dscodip.html