几个有用的iOS开源代码
来源:互联网 发布:icinga windows 编辑:程序博客网 时间:2024/05/20 04:50
本文中将简单介绍几个笔者认为在开发中很有用的iOS开源类库及其简单使用方法
1: SBJson
SBJson, 又名Json Framework, 是一个非常流行的,开源的JSON解析类库。SBJSon的使用非常简单,为在网络中传输与解析格式化的数据提供了极大的便利。
SBJson的使用也很简单,在项目中将类库文件添加到项目中,然后加入几个依赖的FrameWork,目前比价稳定的有ARC3.1版本的和非ARC版本的3.0,大家可以根据自身需要进行下载。
下面就SBJson的使用进行简单介绍:
#import "SBJSon.h"//写json SBJsonWriter* jsonWriter = [[[SBJsonWriter alloc] init] autorelease]; NSMutableArray* tempArray = [NSMutableArray array]; NSDictionary* tempDicA = [NSMutableDictionary dictionary]; [tempDicA addObject @"valueA" forKey @"keyA"]; [tempArray addObject: tempDicA]; NSDictionary* tempDicB = [NSMutableDictionary dictionary]; [tempDicB addObject @"valueB" forKey @"keyB"]; [tempArray addObject: tempDicB]; NSMutableDictionary* jsonDic = [NSMutableDictionary dictionary]; [jsonDic setObject: tempArray forKey: @"array"]; NSString* jsonString = [jsonWriter stringWithObject: jsonDic];//解析json NSDictionary* resultDic = [jsonString JSONValue]; NSArray* resultArray = [resultDic objectForKey @"array"]; NSDictionary* dicA = [resultArray objectAtIndex: 0]; NSDictionary* dicB = [resultArray objectAtIndex: 1]; NSLog(@"%@, %@" [dicA objectForKey @"keyA", [dicB objectForKey: @"keyB"]);
2: ASIHTTPRequest
ASIHTTPRequest是一个非常流行的iOS平台网络通信类库,使用ASIHTTPRequest之后,大大简化了iOS平台的网络编程。其以方便的接口对同步、异步的网络传输进行了传输,将ASIHTTPRequest添加到自己的项目也非常方便,将类库中所有文件拷贝到一个文件夹中,然后将此文件夹添加到项目中,同时要添加如下图CFNetWork之下所示的类库,就可以使用ASIHTTPRequest了:
使用ASIHTTPRequest步骤非常简答,在一般应用开发中,网络连接基本上使用的都是异步方式,下面简单演示一下最简单的异步通讯方法
#import "ASIHTTPRequest.h"- (void) requestDataFromServer{ NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; NSURL* url = [NSURL URLWithString: @"www.fakeurl.com"]; ASIHTTPRequest* request = [ASIHTTPRequest requestWithURL: url]; [request setTag: 1024]; [request setTimeOutSeconds: 3]; [request setAllowCompressedResponse:YES]; [request setDelegate:self]; [request startAsynchronous]; [pool drain];}- (void)requestFinished:(ASIHTTPRequest *)request{ NSString* rawString = [request responseString]; if (request.tag == 1024) { //处理网络返回结果 } }- (void)requestFailed:(ASIHTTPRequest *)request{ if (request.tag == 1024) { //处理网络错误 } }
注意上面的两个函数中,后面连个为ASIHTTPRequest的delegate函数,其声明类型不能改变,只要在生成ASIHTTPRequest时的deleage设成了self,那么最后返回结果,不管是成功调用还是网络失败,都会调用这两个函数中的对应的一个。
3: FMDataBase
FMDataBase是iOS平台中一个非常强大的数据库类库,其将sqlite面向过程的接口以面向对象的方法展现出来,提供了极高的可用性。
其使用很简单,将sqlite 库添加到项目中,然后将FMDataBase类库文件添加到项目中,下面是对笔者对FMDataBase进行的一个二次封装,处理的数据库很简单,只有一张表,两个列,存储的都是一些key-value对,读者可以根据自身需要对此类进行修改。
#import <Foundation/Foundation.h>#import "FMDatabase.h"
@interface DBController : NSObject {}@property (nonatomic, assign) FMDatabase *dataBase;+(BOOL)databaseExit;-(BOOL)initDatabase;-(void)closeDatabase;-(BOOL)deleteTable;-(BOOL)InsertTable:(NSString *)key_type value:(NSString *)key_value;-(BOOL)UpdataTable:(NSString *) valueStr key:(NSString *)keyStr;-(NSMutableDictionary *)querryTable;+(BOOL) deleteDataBase;@end@synthesize dataBase = _dataBase;- (id)init{ if(self = [super init]){ _dataBase = [FMDatabase databaseWithPath: [DBController getPath]]; if (![_dataBase open]) { NSLog(@"Create/Open dataBase %@ Failed!", [DBController getPath]); } }return self;}//数据库是否存在+(BOOL)databaseExit{ return [[NSFileManager defaultManager] fileExistsAtPath: [self getPath]];}//初始化数据库-(BOOL)initDatabase{if ([DBController databaseExit]) { return [self createTable]; }return NO;}//创建数据库-(BOOL)createTable{ return [self.dataBase executeUpdate: @"create table if not exists personTable(id integer primary key autoincrement, key text,value text);"];}//删除数据表-(BOOL)deleteTable{ if ([DBController databaseExit]) { return [self.dataBase executeUpdate: [NSString stringWithFormat:@"drop table %@;",_PERSONINFO]]; } return NO;}//关闭数据库- (void) closeDatabase{ [self.dataBase close];}//插入数据-(BOOL)InsertTable:(NSString *)key value:(NSString *)value{ if ([DBController databaseExit]) { BOOL result = NO; [self.dataBase beginTransaction]; result = [self.dataBase executeUpdate:@"INSERT INTO personTable (key,value) VALUES (?,?)", key, value]; [self.dataBase commit]; return result; } return NO;}//更新数据-(BOOL)UpdataTable:(NSString *) valueStr key:(NSString *)keyStr{ if ([DBController databaseExit]) { BOOL result = NO; [self.dataBase beginTransaction]; result = [self.dataBase executeUpdate:@"UPDATE personTable SET value=? WHERE key=?", valueStr, keyStr]; [self.dataBase commit]; return result; } return NO;}//查询整个表-(NSMutableDictionary *)querryTable{ NSMutableDictionary* resultDic = [[NSMutableDictionary alloc] init]; FMResultSet *rs = [self.dataBase executeQuery:@"select * from personTable"]; while ([rs next]) { [resultDic setObject: [rs stringForColumn: @"value"] forKey: [rs stringForColumn: @"key"]]; } return [resultDic autorelease];}+(BOOL) deleteDataBase{NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);NSString *documentsDirectory = [paths objectAtIndex:0];NSString *path = [documentsDirectory stringByAppendingPathComponent:_DBNAME];//设置数据库得路径NSFileManager *fileManager = [NSFileManager defaultManager];BOOL find = [fileManager fileExistsAtPath:path];if (find) { [fileManager removeItemAtPath: path error: nil];} return find;}- (void)dealloc { [_dataBase close]; _dataBase = nil;[super dealloc];}+ (NSString*) getPath { // 打开的数据库 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; return [documentsDirectory stringByAppendingPathComponent:_DBNAME];//设置数据库得路径}@end
4: MPProgressHUD
MPProgressHUD是一个非常好用的进度指示器类库,其提供了苹果官方sdk没有提供的progress indicator接口,且提供多种样式,使用方法简便。
首先将类库文件添加到项目中。
使用实例代码如下:
#import <UIKit/UIKit.h>#import "MBProgressHUD.h"
#import <libkern/OSAtomic.h>@interface SampleViewController : UITableViewController <MBProgressHUDDelegate>@property (nonatomic, retain) NSCondition* condition;@property (nonatomic, retain) MBProgressHUD* hud;@endstatic volatile NSInteger WAITING_RESPONSE_FOR_SERVERRESPONSE = 0;- (void) popOutMBProgressHUD;- (void) selectorForMPProgressHUD;- (void) notifyMPProgressHUDToDisappear;@implementation SampleViewController@synthesize hud = _hud;@synthesize condition = _condition;- (id) initWithCoder:(NSCoder *)aDecoder{ self = [super initWithCoder: aDecoder]; if (self != nil) { _hud = nil; _condition = [[NSCondition alloc] init]; } return self;}- (void) dealloc{ [_hud release]; [_condition release];}- (void) popOutMBProgressHUD{ MBProgressHUD* tempHud = [[MBProgressHUD alloc] initWithView:self.navigationController.view];self.hud = tempHud;[self.navigationController.view addSubview: tempHud]; self.hud.dimBackground = YES;self.hud.delegate = self;self.hud.labelText = @"正在处理";[self.hud showWhileExecuting:@selector(selectorForMPProgressHUD) onTarget:self withObject: nil animated:YES]; [tempHud release];}- (void) selectorForMPProgressHUD{ OSAtomicCompareAndSwapInt(0, 1, &WAITING_RESPONSE_FOR_SERVERRESPONSE); [self performSelectorInBackground: @selector(tempSelector) withObject: nil]; [self.condition lock]; while (OSAtomicCompareAndSwapInt(1, 1, &WAITING_RESPONSE_FOR_SERVERRESPONSE)) { NSDate* timeOutDate = [NSDate dateWithTimeIntervalSinceNow: 5.0f]; [self.condition waitUntilDate: timeOutDate]; } [self.condition unlock]; }- (void) notifyMPProgressHUDToDisappear{ //通知进度显示hud消失 [self.condition lock]; OSAtomicCompareAndSwapInt(1, 0, &WAITING_RESPONSE_FOR_SERVERRESPONSE); [self.condition signal]; [self.condition unlock]; }
- (void)hudWasHidden:(MBProgressHUD *)hud { // Remove HUD from screen when the HUD was hidded [self.hud removeFromSuperview]; self.hud = nil;}- (void) tempSelector{ sleep(3.0f);//模拟真实的耗时操作 [self notifyMPProgressHUDToDisappear];}@end
- 几个有用的iOS开源代码
- 几个有用的iOS开源代码
- 几个有用的iOS开源代码
- Javascript里的几个有用函数源代码
- 遇到的几个IOS开源代码
- 推荐几个有用的iOS界面开源视图、控件
- 推荐几个有用的iOS界面开源视图、控件
- 推荐几个有用的iOS界面开源视图、控件
- 几个有用的iOS界面开源视图、控件 .
- 推荐几个有用的iOS界面开源视图、控件
- 推荐几个有用的iOS界面开源视图、控件
- 几个非常有用的iOS学习博客链接
- iOS开发之苹果官方几个有用的邮箱
- 几个有用的网站
- 几个有用的过滤器
- 几个有用的sql
- 几个有用的网址~~
- 几个有用的代码
- Linux清除正在写的文件内容(比如nohup.out)
- HDU 1712 ACboy needs your help 多组背包
- AIDL sample
- PHP的三目运算符
- SQL Server 2008 数据维护实务
- 几个有用的iOS开源代码
- OCX和DLL的区别
- 文件描述符、文件表项、V节点表项的一些总结
- 28个Unix/Linux的命令行神器
- php_server详解
- 一步一步复习数据结构和算法基础-KMP算法
- 建设DevOps能力,实现业务敏捷
- sql server 全文搜索研究
- Android修改system只读权限:remount