扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
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:啊左~
在项目功能中有一个定位CLLocation的需求,遇到了一些知识难点,经过各位大侠的帮助,问题解决,特此分享供大家学习,希望大家共同学习进步。
一、简单说明
1.CLLocationManager
CLLocationManager的常用操作和属性
开始用户定位- (void)startUpdatingLocation;
停止用户定位- (void) stopUpdatingLocation;
说明:当调用了startUpdatingLocation方法后,就开始不断地定位用户的'位置,中途会频繁地调用代理的下面方法
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations;
每隔多少米定位一次
@property(assign, nonatomic) CLLocationDistance distanceFilter;
定位精确度(越精确就越耗电)
@property(assign, nonatomic) CLLocationAccuracy desiredAccuracy;
使用定位功能,首先要导入框架,遵守CLLocationManagerDelegate协议,再创建位置管理器CLLocationManager
在iOS8.0后,定位功能需要在info.plist中加入NSLocationWhenInUseUsageDescription和NSLocationAlwaysUsageDescription这两个NSString类型字段,才能够使用定位功能
代码贴出来与大家共勉,各位看官自行研究
{ self.locationManager = [[CLLocationManager alloc] init]; _locationManager.delegate = self; if([CLLocationManager locationServicesEnabled] == NO) { // NSLog(@"没有GPS服务"); } //地理位置精确度 _locationManager.desiredAccuracy=kCLLocationAccuracyNearestTenMeters; //设置距离筛选器,double类型,只要距离变化多少,就调用委托代理 self.locationManager.distanceFilter = kCLDistanceFilterNone; // meters [_locationManager requestWhenInUseAuthorization];// 前台定位 [_locationManager startUpdatingLocation];}- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{ NSLog(@"longitude = %f", ((CLLocation *)[locations lastObject]).coordinate.longitude); NSLog(@"latitude = %f", ((CLLocation *)[locations lastObject]).coordinate.latitude); CGFloat longTI=((CLLocation *)[locations lastObject]).coordinate.longitude; CGFloat latTI=((CLLocation *)[locations lastObject]).coordinate.latitude; //将经度显示到label上 _longitudeLabel.text = [NSString stringWithFormat:@"%f",longTI]; //将纬度现实到label上 _latitudeLabel.text = [NSString stringWithFormat:@"%f",latTI]; // 获取当前所在的城市名 CLGeocoder *geocoder = [[CLGeocoder alloc] init]; //根据经纬度反向地理编译出地址信息 [geocoder reverseGeocodeLocation:locations.lastObject completionHandler:^(NSArray *array, NSError *error) { if (array.count 0) { CLPlacemark *placemark = [array objectAtIndex:0];// //将获得的所有信息显示到label上// self.location.text = placemark.name; //获取城市 NSString *city = placemark.locality; if (!city) { //四大直辖市的城市信息无法通过locality获得,只能通过获取省份的方法来获得(如果city为空,则可知为直辖市) city = placemark.administrativeArea; } // NSLog(@"city = %@", city); _cityName=city; } else if (error == nil [array count] == 0) { // NSLog(@"No results were returned."); } else if (error != nil) { // NSLog(@"An error occurred = %@", error); } }]; //系统会一直更新数据,直到选择停止更新,因为我们只需要获得一次经纬度即可,所以获取之后就停止更新 [manager stopUpdatingLocation];}
以上是关于我给大家整理的IOS开发之详解定位CLLocation,后续还会持续更新,希望大家能够喜欢。
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.定位方法的调用者
篇一:分享简单学习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必备基础:C语言,相信计算机科班出身都知道吧。
要学习C语言常用的关键字,这也要必须要记下来。
要学习C语言的语法,像if...else switch,for,while循环等这些平常用到最多的一定熟练
然后就是不断的练习了,这个过程没有捷径,也千万不要想着走捷径。
1.学习开发语言Objective-C。参考书看《Objective-C基础教程》这本书就行了。书看到后来还需要补充一些关于面向对象的知识,一般计算机专业的学生都是在学C++的时候接触这类思想的。我推荐的那本参考书里也会有一些讲解,进阶的学习需要以后再去看资料,没有特定教材,因为面向对象是一种编程思想,好在Objective-C本身就是这种思想的体现,以后写代码的时候可以慢慢体会。学完《Objective-C基础教程》,就会对iOS开发中所用到的基础数据类有一个了解了,这时候应该就可以写简单的无界面程序了。
2.学习iOS开发的软件运行原理,软件开发思想、规范以及一些苹果公司提供的常用标准UI(User Interface,用户界面)控件的使用方法。这个阶段推荐的参考书是《iPhone 4与iPad开发基础教程》,该书有中文译本,虽然不是最新的iOS教程(最新的教程应该是iOS7开发基础教程,但是该书没有中文译本,如果英文过硬,看这本书当然最好)。
3.熟悉常用第三方控件。因为苹果本身开放性的局限,其提供的标准开发库会有一些功能局限,智慧无线的网友们开发了各种各样的第三方控件来实现他们想要的功能,可以使开发过程事半功倍。此部分为进阶学习内容,需要在掌握前两步内容的基础上展开。这一步主要是试用,学习第三方代码,要求阅读第三方开发文档以及代码多一些。可以与开发同时进行,边学变进行软件开发。
4.除了参考书,这里推荐一个网站“Cocoachina苹果开发中文站”里面分享了很多网友的代码,并且可以对自己学习过程中遇到的问题进行讨论。学习初期,中期以及后期进阶都可以在这个论坛找到相应的学习资料与代码,并且可以通过发帖得到大神的技术指点。对应的英文网站是Stackflow,此网站偏重实际开发问题的解决,交流语言为英文。
5.另外,斯坦福大学每年都开设iOS开发的公开课,从Objective-C的学习到最后的控件使用以及开发思想,架构的学习,都有涉猎,是很好的视频教程。网易公开课中有以往课程配中文字幕的视频,而最新的课程一般没有中文字幕,并且,该课程选择默认学生已经有C++编程基础,可能对于初学者会困难一些。视频属于公开资源,在搜索引擎上搜索斯坦福、iOS等关键字,即可找到相应资源。刚刚简单搜索了一下,优酷已经提供iOS7开发的高清视频专辑。
6.最后,无论学习哪个操作系统的软件开发,最关键还是要多多练习,因此大量的写练习代码,看别人的优秀代码很重要。
为了更好理解使用用tabbar和切换视图,我们创建一个Empty Application。
1、 打开Xcode ,新建项目
2、 创建View Controller
在项目上按花键+N创建新文件,创建 Objective-C class 文件,按Next按钮,subClass 选UIViewController 。勾选上xib选项
以同样方式创建另外三个ViewController ,RedViewController ,GreyViewController,YellowViewController。四个View准备好了。那么Tabbar呢?
3、 创建TabBarController.xib文件,选择创建Empty文件
这时候你发现创建的xib文件是空白的,不用慌,去右下角控件栏中把TabBar Controller拖过来就Ok了。
4、 关联TabBarController.xib ,tabbarAppDelegate这两个文件
在上图中选择File’s Owner,打开Identity Inspector,在Class一栏选择tabbarAppDelegate
这样,我们就可以创建TabBarController.xib 文件指向tabbarAppDelegate 文件的Outlet映射了。
5、 在Xcode中的工具栏的View菜单找到 打开Assistant Editor,使tabbarAppDelegate.h和TabBarController.xib 同时打开。
在xib文件上按住control键,往tabbarAppDelegate.h,创建Outlet.
弹出窗口输入 rootController,点connect。
6、 添加代码
打开tabbarAppDelegate.m,在didFinishLaunchingWithOptions方法中添加代码:
1.- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
2. self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
3. // Override point for customization after application launch.
4. [[NSBundle mainBundle] loadNibNamed:@"TabBarController" owner:self options:nil];
5. [self.window addSubview:self.rootController.view];
6. self.window.backgroundColor = [UIColor whiteColor];
7. [self.window makeKeyAndVisible];
8. return YES;
7、 往TabBarController.xib上添加Tab Bar Item,
把控件栏上的Tab Bar Item控件往TabBarController.xib上拖拽即可,一个放4个。
8 、关联Tab Bar Item和***ViewController。
选择其中一个Tab Bar Item,在右上角打开Identity Inspector,在Class中选择BlueViewController:
然后,打开Attribute,在NIB Name选择BlueViewController:
其他3个tab item重复类似的操作,选中对应的ViewController,这样在切换Tab标签时,就可以切换到对应的页面。
9、 设置tab item的属性
选中其中一个tab item ,会在右上角的属性栏里看到如下信息
Badge是红色圈圈里面有数字 ,表示有多少条信息的属性
Identifier 是tab item的样式,选custom是自定义,下面的是系统的样式。我选了其中四种。
bar ITem 的title image在custom的样式下能设置。
10 、剩下的3个Tab Item也做类似的设置即可。
现在基本完工,运行看看结果如何。好吧,其实和第一第二个图是一样的`,这里就不放了。
11 、在viewDidLoad方法加Log观察切换View
可以加写日志看看对应的View是什么时候运行的。第一个运行的View是BlueViewController,点击其他的tab项时,加载其他的view,加载一次之后下次点击不再调用viewDidLoad。
1.- (void)viewDidLoad
2. [super viewDidLoad];
3. NSLog(@"BlueViewController");
4. // Do any additional setup after loading the view from its nib.
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流