需求如题,如果是你,你一定首先想到看看JavaScriptCore有没有暴露出对应的 delegate 方法可以直接用,抱歉,还真没有。那该怎么办?怎么办?么办?办?......
为平川等地区用户提供了全套网页设计制作服务,及平川网站建设行业解决方案。主营业务为成都网站制作、成都做网站、外贸营销网站建设、平川网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
记得之前有一篇关于 JSBridge 的文章有提到,直接 NSObject 类有一个方法,webView:didCreateJavaScriptContext:forFrame:,从语义上看,应该就满足上面的需求。
好,写个 NSObject 的分类实现下看看。
测试很简单,在 web 页面的 js 脚本里,调用 printHello(); 即可。
实践证明:好使!
熟悉 runtime 的话,这个很简单,调用 class_copyMethodList 把类里所有的方法取出来打印就好。有的时候,为了分析一个需求如何实现,可能要递归打印几个类的方法,从当前类,到其父类,到其爷爷类,...直到 NSObject 类。
感谢 oc 语言的创始人和开发者,每个类的类方法、实例方法都几乎可以做到望文生义,才让大家能有这一快乐!
最后,enjoy yourself!
篇一:分享简单学习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%,不相信你可以试试。
Web Service使用的主要协议是HTTP协议,即 超文本传输协议 。
HTTP/1.1协议共定义了8种请求方法(OPTIONS、HEAD、GET、POST、PUT、DELETE、TRACE、CONNECT)作为Web服务器。
GET方法 ,是向指定的资源发送请求,请求的参数“显式”地在URL的后面。有点像明信片,把内容“显式”写在外面,因此安全性比较差。一般使用于读取数据、例如从服务器读取静态图片、或查询数据等。
POST方法 ,是向指定资源提交数据,请求服务器进行处理,数据包含在 请求体 中。参数和地址分开,放在body里面。有点像把信内容放在信封中,接触的人看不到,安全性比较高。一般用于例如提交表单、上传文件等(请求的的动态资源,与查询类似,每个方法调用都要传递很多参数,因此需要使用NSMutableURLRequest创建请求。 )
iOS SDK中为HTTP请求提供了同步和异步请求这两种不同的API,
同步请求,可以从因特网请求数据,一旦发送同步请求,程序将停止用户交互,直至服务器返回数据完成,才可以进行下一步操作,意味着线程阻塞;
异步请求,不会阻塞主线程,而会建立一个新的线程来操作,用户发出异步请求后,依然可以对UI进行操作,程序可以继续运行;
它们的主要区别在于连接方式的不同。
下面通过请求一个登陆接口介绍有关于网络请求中的不同情况。
【本次开发环境: Xcode:7.2 iOS Simulator:iphone6 By:啊左】
一、GET方法
1.同步get方法:
//1.创建一个web路径
NSString*webPath=[NSString stringWithFormat:@";pass=%@btn=login",yourname,yourpass];
webPath=[webPath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; //url不允许为中文等特殊字符,需要进行字符串的转码为URL字符串,例如空格转换后为“%20”;
NSURL *url=[NSURL URLWithString:webPath];
//2.根据WEB路径创建一个请求
NSURLRequest *request=[NSURLRequest requestWithURL:url];
NSURLResponse *respone;//获取连接的响应信息,可以为nil
NSError *error; //获取连接的错误时的信息,可以为nil
//3.得到服务器数据
NSData*data=[NSURLConnection sendSynchronousRequest: request returningResponse: respone error: error];
if(data==nil) { NSLog(@"登陆失败:%@,请重试",error); return; }
/* 4.对服务器获取的数据data进行相应的处理; */
2.异步get方法:
异步请求与同步请求的不同在于使用NSURLConnectionDataDelegate委托协议,指定代理.
@interface ViewController : UIViewController // 遵循协议
@property (weak,nonatomic) NSMutableData *receiveData; //创建一个可变data,用于异步接收服务器的数据
@end
创建网络请求:
//1.创建一个web路径
NSString*webPath=[NSString stringWithFormat: @";pass=%@btn=login",yourname,yourpass];
webPath=[webPath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL *url=[NSURL URLWithString:webPath];
//2.根据WEB路径创建一个请求
NSURLRequest *request=[NSURLRequest requestWithURL:url];
//3.指定代理 以异步的方式接收数据NSURLConnectionDataDelegate
NSURLConnection *con=[NSURLConnection connectionWithRequest:request delegate:self];
if(con==nil)
{
NSLog(@"创建连接失败.");
return;
}
else//成功 准备接数据
{
if(self.receiveData==nil)
{
self.receiveData=[[NSMutableData alloc] init];
}
}
异步的代理行为:
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{
NSLog(@"已经响应成功.");
//清空 为当前连接做准备
self.receiveData.length=0;
}
-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ NSLog(@"已经接收到了数据.");
//追加接收到的数据
[self.receiveData appendData:data];
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection{
NSLog(@"接收数据已经完成.");
/* 对服务器获取的数据receiveData进行相应的处理; */
}
-(void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ NSLog(@"连接失败.");
}
二、POST方法
1.同步post方法:
//1.创建一个web路径
NSString *webPath=@"";
webPath = [webPath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSURL *url=[NSURL URLWithString:webPath];
//2.建立一个带协议缓存类型的请求 (使用NSMutableURLRequest,是post方法的关键) NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:url cachePolicy:(NSURLRequestUseProtocolCachePolicy) timeoutInterval:10]; //3.设置表单提交的方法(默认为get) [request setHTTPMethod: @"post"];
//4.设置要提交的参数 NSString *args=[NSString stringWithFormat:@"uname=%@upas=%@btn=login",uname,upas]; [request setHTTPBody: [args dataUsingEncoding:NSUTF8StringEncoding]];
NSData *recvData=[NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; if(recvData!=nil) {
/*
对服务器获取的数据recvData进行相应的处理
*/
}
else
{
NSLog(@"连接失败,请重试!");
}
2.post方法的异步与同步的区别在于使用NSURLConnectionDataDelegate委托协议,指定代理.
这一点与get方法一致,所以就不进行长篇幅的演示了。
以上就是关于部分网络同步异步请求,get、post请求方法的演示,由于UI控件还有其他的处理没有附上,具体的读者可以进行相应细节的调整,进行完整的网络请求项目开发。
由于iOS开始,引入了新的网络接口NSURLSession,而在iOS9中NSURLConnection被宣布弃用,因此关于NSURLSession发送GET和POST请求的资料部分,有兴趣的可以参考:
iOS开发 GET、POST请求方法(NSURLSession篇)
by:啊左~
1.定义函数时,希望传入的参数不为nil,或者为nil时会有警告显示:
如下:
- (instanceype)initWithFoo:(NSString *)foo bar:(NSString *)bar sark:(NSString *)sark
__atttribute__((nonnull(1, 2)));
p.s. index从1开始,不是0,且只对对象生效。
该技巧同样来自,sunnyxx大神的微信,逗比狗~
2.定义函数时,希望子类override该方法时候,必须调用super,否则编译器直接报错。
@interface OldSix:NSObject
- (void)fooWithNothing __attribute__((objc_requires_super));
该技巧同样来自,sunnyxx大神的微信,逗比狗~
wait~~~~~
/*检查子类在重写该方法时有没有调用自己(父类)的实现
*对于一些可以被继承的类,需要子类在重某一调用父类的实现以保证正确的行为,通过在头文件方法的声明末尾添加`NS_REQUIRES_SUPER`
*可以让编译器检查子类方法有调用父类的实现。具体使用方法如下:
* - (void)viewWillAppear:(BOOL)animated NS_REQUIRES_SUPER;
*/
但是根据我的实际测试,发现sunnyxx大神仙的方法,没有任何显示效果,不知道是不是我打开的方式不对还是怎么,
总之,NS_REQUIRES_SUPER的方法亲测可用。
3.误删系统sdk头文件的解决办法
在终端中输入:
$ cd ~/Library/Developer/Xcode/DerivedData/ModuleCache/
$ rm -rf *
4.ARC下打印retainCount
extern uintptr_t _objc_rootRetainCount(id obj);
id test = [NSString new];
NSLog(@"retain count %lu",_objc_rootRetainCount(test));
5.工程报错下,仍然可以编译成功
6.定位方法的调用者
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款