nsstring

iOS中关于json解析的5中方式

元气小坏坏 提交于 2020-03-07 21:37:13
作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式。 有的json代码格式比较混乱,可以使用 此“http://www.bejson.com/”网站来进行JSON格式化校验( 点击打开链接 )。此网站不仅可以检测Json代码中的错误,而且可以以视图形式显示json中的数据内容,很是方便。 从IOS5开始,APPLE提供了对json的原生支持(NSJSONSerialization),但是为了兼容以前的ios版本,可以使用第三方库来解析Json。 本文将介绍TouchJson、 SBJson 、JSONKit 和 iOS5所支持的原生的json方法,解析国家气象局API,TouchJson和SBJson需要下载他们的库 TouchJson包下载: http://download.csdn.net/detail/enuola/4523169 SBJson 包下载: http://download.csdn.net/detail/enuola/4523177 JSONKit包下载:http://download.csdn.net/detail/enuola/4523160 下面的完整程序源码包下载:http://download.csdn.net/detail/enuola/4523223 PS: 国家气象局提供的天气预报接口 接口地址有三个: http:/

仿SDWebImage

房东的猫 提交于 2020-03-07 19:23:53
仿SDWebImage 目标:模拟 SDWebImage 的实现 说明:整体代码与之前博客上的演练代码的基本一致,只是编写顺序会有变化! 在模仿 SDWebImage 之前,首先需要补充一个知识点:NSOperation自定义操作 下载操作实现 #import "NSString+Path.h" @interface DownloadImageOperation() /// 要下载图像的 URL 字符串 @property (nonatomic, copy) NSString *URLString; /// 完成回调 Block @property (nonatomic, copy) void (^finishedBlock)(UIImage *image); @end @implementation DownloadImageOperation + (instancetype)downloadImageOperationWithURLString:(NSString *)URLString finished:(void (^)(UIImage *))finished { DownloadImageOperation *op = [[DownloadImageOperation alloc] init]; op.URLString = URLString; op

理解Autorelease pool

落爺英雄遲暮 提交于 2020-03-07 18:40:26
如果你能够真正的理解autorelease,那么你才是理解了Objective c的内存管理。Autorelease实际上只是把对release的调用延迟了,对于每一个Autorelease,系统只是把该Object放入了当前的Autorelease pool中,当该pool被释放时,该pool中的所有Object会被调用Release。 [1]在Iphone项目中,大家会看到一个默认的Autorelease pool,程序开始时创建,程序退出时销毁,按照对Autorelease的理解,岂不是所有autorelease pool里的对象在程序退出时才release, 这样跟内存泄露有什么区别? 答案是,对于每一个Runloop, 系统会隐式创建一个Autorelease pool,这样所有的release pool会构成一个象CallStack一样的一个栈式结构,在每一个Runloop结束时,当前栈顶的Autorelease pool会被销毁,这样这个pool里的每个Object会被release。 那什么是一个Runloop呢? 一个UI事件,Timer call, delegate call, 都会是一个新的Runloop。Autorelease是保证一个method安全的,对于method中的函数调用也适用。例子如下: NSString* globalObject; -

黑幕背后的Autorelease

只愿长相守 提交于 2020-03-07 18:35:15
我是前言 Autorelease机制是iOS开发者管理对象内存的好伙伴,MRC中,调用[obj autorelease]来延迟内存的释放是一件简单自然的事,ARC下,我们甚至可以完全不知道Autorelease就能管理好内存。而在这背后,objc和编译器都帮我们做了哪些事呢,它们是如何协作来正确管理内存的呢?刨根问底,一起来探究下黑幕背后的Autorelease机制。 Autorelease对象什么时候释放? 这个问题拿来做面试题,问过很多人,没有几个能答对的。很多答案都是“当前作用域大括号结束时释放”,显然木有正确理解Autorelease机制。 在没有手加Autorelease Pool的情况下,Autorelease对象是在当前的runloop迭代结束时释放的,而它能够释放的原因是系统在每个runloop迭代中都加入了自动释放池Push和Pop __weak id reference = nil; - (void)viewDidLoad { [super viewDidLoad]; NSString *str = [NSString stringWithFormat:@"sunnyxx"]; // str是一个autorelease对象,设置一个weak的引用来观察它 reference = str; } - (void)viewWillAppear:(BOOL

2016-03-16 sdwebimage

南楼画角 提交于 2020-03-07 18:34:10
SDWebImage框架底层讲解 一. 异步加载图片 1.搭建界面&数据准备 数据准备 @interface AppInfo : NSObject /// App 名称 @property (nonatomic, copy) NSString *name; /// 图标 URL @property (nonatomic, copy) NSString *icon; /// 下载数量 @property (nonatomic, copy) NSString *download; + (instancetype)appInfoWithDict:(NSDictionary *)dict; /// 从 Plist 加载 AppInfo + (NSArray *)appList; @end + (instancetype)appInfoWithDict:(NSDictionary *)dict { id obj = [[self alloc] init]; [obj setValuesForKeysWithDictionary:dict]; return obj; } /// 从 Plist 加载 AppInfo + (NSArray *)appList { NSURL *url = [[NSBundle mainBundle] URLForResource:@"apps.plist"

30分钟学会Objective-C

流过昼夜 提交于 2020-03-07 17:36:28
什么是Objective-C Objective-C,简称OC,是一种通用、高级、面向对象的编程语言。它扩展了标准的ANSI C编程语言, 将Smalltalk式的消息传递机制加入到ANSI C中。当前主要支持的编译器有GCC和Clang(采用LLVM作为后端)。 Objective-C的商标权属于苹果公司,苹果公司也是这个编程语言的主要开发者。 苹果在开发NeXTSTEP操作系统时使用了Objective-C,之后被OS X和iOS继承下来。 现在Objective-C与Swift是OS X和iOS操作系统、及与其相关的API、Cocoa和Cocoa Touch的主要编程语言。 Objective-C是C语言的严格超集。这意味着任何C语言程序不经修改就可以直接通过Objective-C编译器, 在Objective-C中使用C语言代码也是完全合法的。Objective-C被描述为盖在C语言上的薄薄一层, 因为Objective-C的原意就是在C语言主体上加入面向对象的特性。OC项目中常用的拓展名如下: 扩展名 内容类型 .h 头文件。头文件包含类,类型,函数和常数的声明。 .m 源代码文件。这是典型的源代码文件扩展名,可以包含 Objective-C 和 C 代码。 .mm 源代码文件。带有这种扩展名的源代码文件,除了可以包含Objective-C和C代码以外还可以包含C++代码

iOS 获取当前经纬度

雨燕双飞 提交于 2020-03-07 07:36:47
一般说来LBS功能一般分为两块;一块是地理定位,就是获取当前精度、纬度和地理位置的功能,这一部分功能主要用到CoreLocation.Frameworks。一部分就是显示地图信息、丰富地图内容等,这一部分主要用到MapKit.Frameworks。以上这几个功能的测试最好都要在真机上进行。模拟器上定位一般会在Apple的加州总部。 首先介绍CoreLocation。先说主要功能吧。 第一个功能,也是最基本的功能是获取经度纬度。 折腾了一早上原来是赋值的姿势不对,挫败感真心强烈啊。 好了言归正传,在IOS上获取经度纬度相当简单。 添加CoreLocation.Frameworks,并将其头文件放在需要引用的类的头文件中。创建一个CLLocationManager对象。为当前CLLocationManager对象设置代理。设置其他基本属性如下: // 设置寻址经度 self.locManager.desiredAccuracy = kCLLocationAccuracyBest; self.locManager.distanceFilter = 5.0; 然后调用 - (void)startUpdatingLocation;方法,开始更新当前坐标位置。 这样前期的准备工作就完成了。 然后就是要完成代理方法了。 如果只是要实现获取当前经纬度的功能,只要实现以下两个代理就好了。 -

iOS定位服务与地图开发(1)---获取经纬度

这一生的挚爱 提交于 2020-03-07 07:35:08
定位服务是通过GPS等方式查找定位自己的位置的,再通过地图标注出来。 在iOS中定位服务和地图开发是使用两套API分别完成的。 1、定位服务: iOS系统提供3种不同定位途径: 1>WiFi定位:通过查询一个WiFi路由器的地理位置信息,iPhone、iPod Touch、iPad都可以采用。 2>蜂窝式移动电话基站定位:通过移动运营商基站定位 3>GPS卫星定位:通过3~4颗GPS卫星位置定位,最为准确,但是耗电量大 iOS不像Android系统在定位服务编程时可以指定采用哪种途径进行定位。iOS的API把底层这些细节屏蔽掉了,开发人员和用户并不知道现在设备采用哪种方式进行定位,iOS系统会根据设备的情况和周围环境,采用一套最佳的解决方案。具体是:如果能够GPS信息,那么设备优先采用GPS定位,否则采用WiFi或蜂窝基站定位,在WiFi和蜂窝基站之间优先使用WiFi,如果无法连接到WiFi才使用蜂窝基站定位。 1.1、定位服务编程 在iOS 6之后,定位服务主要使用CoreLocaation框架,定位时主要使用CLLocationManager、CLLocationManagerDelegate和CCLocation。 CLLocationManager类:定位服务管理类,它能够使我们获得设备的 位置信息 和 高度信息 ,也可以监控设备进入某个区域,还可以帮助我们获得设备的

LLDB调试器的使用

倾然丶 夕夏残阳落幕 提交于 2020-03-07 07:22:35
随着Xcode 5的发布,LLDB调试器已经取代了GDB,成为了Xcode工程中默认的调试器。它与LLVM编译器一起,带给我们更丰富的流程控制和数据检测的调试功 能。LLDB为Xcode提供了底层调试环境,其中包括内嵌在Xcode IDE中的位于调试区域的控制面板,在这里我们可以直接调用LLDB命令。如图1所示: 图1:位于Xcode调试区域的控制台 在本文中,我们主要整理一下LLDB调试器提供给我们的调试命令,更详细的内容可以查看 The LLDB Debugger 。 LLDB命令结构 在使用LLDB前,我们需要了解一下LLDB的命令结构及语法,这样可以尽可能地挖掘LLDB的潜能,以帮助我们更充分地利用它。 LLDB命令的语法有其通用结构,通常是以下形式的: 1 <command> [<subcommand> [<subcommand>...]] <action> [-options [option-value]] [argument [argument...]]</action></subcommand></subcommand></command> 其中: (命令)和(子命令):LLDB调试命令的名称。命令和子命令按层级结构来排列:一个命令对象为跟随其的子命令对象创建一个上下文,子命令又为其子命令创建一个上下文,依此类推。 :我们想在前面的命令序列的上下文中执行的一些操作。

UITableViewCell的重用机制和解决方法

这一生的挚爱 提交于 2020-03-06 15:09:29
UITableView为了做到显示与数据的分离, 单独使用了一个叫UITableViewCell的视图用来显示每一行的数据, 而tableView得重用机制就是每次只创建屏幕显示区域内的cell,通过重用标识符identifier来标记cell, 当cell要从屏幕外移入屏幕内时, 系统会从重用池内找到相同标识符的cell, 然后拿来显示, 这样本是为了减少过大的内存使用, 但在很多时候, 我们会自定义cell,这时就会出现一些我们不愿意看到的现象, 下面就介绍一些解决这些问题的方法 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; // 这句代码就是造成cell的重用的代码 在cell中我布局了左边一个imageView, 右边一个Label, 总共显示20行 1 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 2 MyTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"