遇到的几个IOS开源代码

本文中将简单介绍几个笔者认为在开发中很有用的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) {  
        //处理网络错误  
     }   
}   

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) {  
        //处理网络错误  
     }   
}   

2: ASIHTTPRequest

ASIHTTPRequest是一个非常流行的iOS平台网络通信类库,使用ASIHTTPRequest之后,大大简化了iOS平台的网络编程。其以方便的接口对同步、异步的网络传输进行了传输,将ASIHTTPRequest添加到自己的项目也非常方便,将类库中所有文件拷贝到一个文件夹中,然后将此文件夹添加到项目中,同时要添加如下图CFNetWork之下所示的类库,就可以使用ASIHTTPRequest了:



使用ASIHTTPRequest步骤非常简答,在一般应用开发中,网络连接基本上使用的都是异步方式,下面简单演示一下最简单的异步通讯方法


注意上面的两个函数中,后面连个为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;  
@end  
  
static 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  






2: ASIHTTPRequest

ASIHTTPRequest是一个非常流行的iOS平台网络通信类库,使用ASIHTTPRequest之后,大大简化了iOS平台的网络编程。其以方便的接口对同步、异步的网络传输进行了传输,将ASIHTTPRequest添加到自己的项目也非常方便,将类库中所有文件拷贝到一个文件夹中,然后将此文件夹添加到项目中,同时要添加如下图CFNetWork之下所示的类库,就可以使用ASIHTTPRequest了:



使用ASIHTTPRequest步骤非常简答,在一般应用开发中,网络连接基本上使用的都是异步方式,下面简单演示一下最简单的异步通讯方法


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值