几个有用的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


原创粉丝点击