Monthly Archives: November 2014

多线程技术GCD的8种队列请求示例

1、串行队列同步请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#pragma mark 1、串行队列同步请求
- (void)gcd1
{
    // 创建一个串行队列dispatch_queue_create(标识, 串行队列),DISPATCH_QUEUE_SERIAL 表示串行队列
    dispatch_queue_t queue = dispatch_queue_create("gcd1", DISPATCH_QUEUE_SERIAL);
 
 
    // 发起一个同步任务并执行10次:dispatch_sync(dispatch_queue_t queue, ^{ code })是同步执行函数
    for (int i = 0; i < 10; i++) {
 
        dispatch_sync(queue, ^{
            // 打印当前线程
            NSLog(@"第 %d 次 - %@", i, [NSThread currentThread]);
        });
    }
    // 结论:串行任务按顺序执行,同步任务按顺序执行,无并发数,当前只有一个线程,因此在线程1按顺序执行
}

运行结果:[……]

继续阅读

iOS开发Get请求的基本步骤与方法

一、基本步骤

1、创建URL字符串,即网址
2、创建URL,即创建一个需要请求的资源
3、创建一个请求
4、创建一个连接
5、发起连接
6、接收数据

二、代码示例:

1、实现网络请求

1
2
3
4
5
6
7
8
9
10
// 1、创建URL字符串,即网址
    NSString *string = @"www.baidu.com";
    // 2、创建URL,即创建一个需要请求的资源
    NSURL *url = [NSURL URLWithString:string];
    // 3、创建一个请求
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    // 4、创建一个连接
    NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];
    // 5、发起连接
    [connection start];

2、实现代理方法接收数据,遵循协议,实现以下几个主体方法[……]

继续阅读

iOS开发中自定义对象的归档

1、在iOS开发中,对象的归档存储是最为常用一种操作,我们经常需要将对象保存到本地,后续再从本地读取调用,比如说游戏中的存档操作。
2、常规类型如字符串、数组、字典、图片等对象的归档系统都有对应的方法,使得归档变得简单,那么自定义的对象如何归档呢?
3、实现原理与常规类型归档类似,唯一不同的是自定义对象如果需要归档则必须遵守协议,并实现该协议中的两个方法:

1
2
3
4
#pragma mark 自定义对象解档必须实现方法
- (id)initWithCoder:(NSCoder *)aDecoder
#pragma mark 自定义对象归档必须实现方法
- (void)encodeWithCoder:(NSCoder *)aCoder

4、举例说明,现自定义一个Person类,成员变量有name、age、phone,现需要对该对象进行归档,对象该如何写:
4.1、Person.h

1
2
3
4
5
6
7
8
9
10
11
12
13
#import <Foundation/Foundation.h>
 
@interface Person : NSObject <nscoding>
 
@property (nonatomic, strong)   NSString    *name;
 
@property (nonatomic, assign)   NSInteger   age;
 
@property (nonatomic, strong)   NSString    *phone;
 
- (id)initWithName:(NSString *)name age:(NSInteger)age phone:(NSString *)phone;
 
@end</nscoding>

4.2、Person.m[……]

继续阅读

iOS开发中多对象归档操作

1、NSData方式多对象归档

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    // 1、创建归档路径
    NSString *dataPath = [documentsPath stringByAppendingPathComponent:@"data.plist"];
    // 2、创建可变数据对象
    NSMutableData *data = [NSMutableData data];
    // 3、创建归档
    NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
    // 4、归档中添加对象元素
    [archiver encodeObject:array forKey:@"array"];
    [archiver encodeObject:dict forKey:@"dict"];
    [archiver encodeObject:string forKey:@"string"];
    [archiver encodeObject:imageData forKey:@"image"];
    // 5、结束归档
    [archiver finishEncoding];
    // 6、写入本地沙盒
    [data writeToFile:dataPath atomically:YES];
    // 7、取出归档即解档
    NSData *data1 = [NSData dataWithContentsOfFile:dataPath];
    NSKeyedUnarchiver *unarchive1 = [[NSKeyedUnarchiver alloc] initForReadingWithData:data1];
    // 8、还原各对象
    NSArray *array1 = [unarchive1 decodeObjectForKey:@"array"];
    NSDictionary *dict1 = [unarchive1 decodeObjectForKey:@"dict"];
    NSString *string1 = [unarchive1 decodeObjectForKey:@"string"];
    UIImage *imag1 = [UIImage imageWithData:[unarchive1 decodeObjectForKey:@"image"]];

2、数组方式进行多对象归档[……]

继续阅读