NSUrlSession-Study

学习NSUrlSession的使用

我的服务器是搭建在本地的,所以可以看到我访问的都是localhost,数据也是写死的

  • 基本使用
1
2
3
4
5
6
7
8
9
// 下面的代码,放进一个按钮点击事件中执行
NSURLSession *session = [NSURLSession sharedSession];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://localhost/studing/1.php"]];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@", string);
}];
[task resume];

打印的内容,就是http请求所返回的所有内容

  • next,感受异步
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//按钮点击
- (void)buttonRequestAction:(UIButton *)sender
{
NSURLSession *session = [NSURLSession sharedSession];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://localhost/studing/1.php"]];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
sleep(3); // 延迟
NSString *string = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"%@", string);
}];
[task resume];
}
// 按钮点击
- (void)otherAction:(UIButton *)sender
{
NSLog(@"并没有阻塞主线程");
}

点击request请求服务器,再点击另一个按钮的时候,并没有阻塞主线程
这就是NSUrlSession的强大之处,next,后面继续

Java Socket中的ObjectOutputStream和ObjectInputStream

Java Socket中的ObjectOutputStream和ObjectInputStream

在写Socket通讯程序时出现的bug
获取socket对象的InputStream和OutputStream封装为
ObjectInputStream和ObjectOutputStream,启动Server和Client发送序列化的对象
会发现Client和Server连上了,但是一直没有传输数据
后来发现问题
如果Server端首先建立的是
ObjectInputStream = new ObjectInputStream(socket.getInputStream());
那么Client绝对不能先建立 ObjectInputStream 后建立ObjectOutputStream
否则程序会一直阻塞…
列出所有情况,只限封装为Object流的情况
其他的三种情况都是可以的
(Server : 1st Output 2nd Input Client :1st Output 2nd Input) <<—-允许
(Server : 1st Output 2nd Input Client :1st Input 2nd Output) <<—-允许
(Server : 1st Input 2nd Output Client :1st Output 2nd Input) <<—-允许
(Server : 1st Input 2nd Output Client :1st Input 2nd Output) <<—-只有这种情况不允许

备注:
使用不带缓冲区的流,直接写就好了,带缓冲区的,先刷一刷flush

view和layer缠绵

view 的 frame bounds center

要先讲解frame,还是得讲解bounds;

当一个view添加到viewcontroller.view时,其实是基于viewcontroller.view的坐标系;

就像viewcontrolelr.view添加到uiwindow,其实是基于uiwindow的坐标系;

view的bounds属性就是添加子view的时候,给子视图参照的坐标系;

该坐标系是由bounds和center计算,frame只是方便描述这两个值而已

阅读更多