ZhouJiatao's Blog


  • 首页

  • 归档

  • 标签
ZhouJiatao's Blog

初识TCP/IP

发表于 2017-02-05 |

TCP(英文:Transmission Control Protocol, 中文:传输控制协议) 是一种面向连接的、可靠的、基于字节流的传输层通信协议.
IP(英文:Internet Protocol, 中文:网际协议) 是用于报文交换网络的一种面向数据的协议。
我们可以通俗的理解为:
TCP 负责应用程序之间的通信,IP 负责计算机之间的通信。它们协同工作,发送方遵循 TCP 将应用程序数据分割并装入 IP 包,通过 IP 将包发送至接受者, 接受者遵循 TCP 将接受到的包重新组合。

实际上,我们所说的 TCP/IP 并不只单纯的指 TCP 和 IP 两种协议,而是指一整个以 TCP 和 IP 为核心的网络传输协议家族。

阅读全文 »
ZhouJiatao's Blog

Linux权限

发表于 2017-01-23 |

Unix-like(比如 Linux 和 OS X) 操作系统,有一个非常重要且根深蒂固的特性,那就是允许多用户。
比如,连接上网络,我们可以多人同时通过 ssh(secure shell) 登录并操作同一个系统。
Linux 通过 文件所有权(ownership) 和 访问权限(permissions) 保护文件的安全,避免文件被其他用户破坏。
我们用 owner、group、others 来区分不同等级的所有权, 并使用 Read(r)、Write(w)、Execute(x) 来区分不同的访问权限。组合起来,就可以限制不同等级的所有权拥有不同的访问权限。

前提:这里假设你已经知道用户和群组的概念和 ls 命令的基本用法。

阅读全文 »
ZhouJiatao's Blog

UIView如何移除所有subview

发表于 2017-01-20 |

UIView 并没有提供移除所有 subview 的方法。需要我们遍历 subview, 并逐一调用其 removeFromSuperview() 方法。 但这并不意味着需要写出冗长的 for 循环。

阅读全文 »
ZhouJiatao's Blog

iOS Key-Value Observing(KVO)

发表于 2016-10-23 |

Key-value observing(简称KVO)是一种机制,它允许某个对象的属性发生变化时通知其它对象。

Key-value observing主要的好处是,它拥有框架级的支持,使用Key-value observing无需为项目导入其它代码。

不同于NSNotificationCenter的通知,KVO机制中没有负责发送通知的中心对象。当对象的属性发生变化时,该对象直接向所有它的观察者发送通知。

阅读全文 »
ZhouJiatao's Blog

搭建Git服务器

发表于 2016-09-21 | 分类于 Other |

这篇教程讲述如何创建最基本的Git服务器,最后会介绍如何限制通过Shell登录以确保安全。

阅读全文 »
ZhouJiatao's Blog

iOS小问题汇总

发表于 2016-08-28 |

这里收录了iOS开发中能遇到的各种小问题。

阅读全文 »
ZhouJiatao's Blog

iOS App强制更新机制

发表于 2016-04-28 | 分类于 iOS How-To |

随着公司业务的不断演化,或者是后台接口的重大更新,某些旧版本App已经不能正常为用户提供服务。
这种情况下,应该强制用户更新 App。
否则,继续使用有问题的旧版 App 将导致错误数据的产生,频繁的错误和闪退也会引发用户更加强烈的不满。
值得注意的是,需要旧版本进行强制更新,首先必须确保旧版本已经预留了强制更新的功能。
个人建议最好在第一个版本就预留强制更新功能,而且非常建议 App 向后台发送的的每个请求,都附带上 App 版本号、设备的系统版本号。让后台知道版本信息,有利于它灵活的限制 App 的请求(比如,需要限制使用某个功能必须更新到最新版);另外对于排除错误也是相当有利。

阅读全文 »
ZhouJiatao's Blog

MVVM for iOS

发表于 2016-04-20 | 分类于 Other |

如果你接触过移动应用开发,那么你很可能已经听说过 Model-View-Controller(简称MVC)。
MVC是一种相当传统、经典的开发模式,Apple官方也推荐使用这种模式开发iOS应用。
在MVC下,所有对象都被分为3大类:

  1. 持有数据的Model;
  2. 显示用户界面的View;
  3. View和Model通讯的桥梁:controller;
    mvc diagram

View和Model之间不会直接的相互引用,它们之间的沟通是通过controller来协调的。用户对界面View进行了操作,View就会通知Controller更新Model的状态;Model的状态改变,会通知controller去更新界面View。

阅读全文 »
ZhouJiatao's Blog

去除UITableView分隔线的左边距

发表于 2016-04-09 | 分类于 iOS How-To |

解决方法一: 在 Storyboard 设置 Separator Insets

在 Storyboard 中选择 Cell, Attributes inspector -> Separator -> Custom Insets:
Left 填写 0。

解决方法二:设置cell的边距

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
// Remove seperator inset
if ([cell respondsToSelector:@selector(setSeparatorInset:)]) {
[cell setSeparatorInset:UIEdgeInsetsZero];
}
// Prevent the cell from inheriting the Table View's margin settings
if ([cell respondsToSelector:@selector(setPreservesSuperviewLayoutMargins:)]) {
[cell setPreservesSuperviewLayoutMargins:NO];
}
// Explictly set your cell's layout margins
if ([cell respondsToSelector:@selector(setLayoutMargins:)]) {
[cell setLayoutMargins:UIEdgeInsetsZero];
}
}

解决办法三:在cell中模拟出分隔线

将UITableView的separatorStyle属性设置为None,然后在cell的底部加一个View,设置该View的leading、trailing space to superView 为0,高度固定为1或者0.5,最后设置背景色。

参考链接:http://stackoverflow.com/questions/25770119/ios-8-uitableview-separator-inset-0-not-working

ZhouJiatao's Blog

iOS Base64 Encoding&Decoding

发表于 2016-03-05 | 分类于 iOS How-To |

From WikipediaWi -

Base64 is a group of similar binary-to-text encoding schemes that represent binary data in an ASCII string format by translating it into a radix-64 representation. The term Base64 originates from a specific MIME content transfer encoding.

直接例子上代码示例。代码1 用Base64加密”宇宙”二字,代码2 将Base64字符串解密为普通字符串。

Swift

var str = "宇宙"

//1 Encoding
let plainData = str.dataUsingEncoding(NSUTF8StringEncoding)
let base64String = plainData?.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))
print(base64String!) // 5a6H5a6Z

//2 Decoding
let decodeData = NSData(base64EncodedString: base64String!, options: NSDataBase64DecodingOptions(rawValue: 0))
let decodeString = NSString(data: decodeData!, encoding: NSUTF8StringEncoding)
print(decodeString) // 宇宙

Objective-C

NSString *str = @"宇宙";

//1 Encoding
NSData *plainData = [str dataUsingEncoding:NSUTF8StringEncoding];
NSString *base64String = [plainData base64EncodedStringWithOptions:0];
NSLog(@"%@",base64String); // 5a6H5a6Z

//2 Decoding
NSData *decodedData = [[NSData alloc] initWithBase64EncodedString:base64String options:0];
NSString *decodedString = [[NSString alloc] initWithData:decodedData encoding:NSUTF8StringEncoding];
NSLog(@"%@",decodedString); // 宇宙
123
ZhouJiatao

ZhouJiatao

Write simple code

29 日志
5 分类
18 标签
GitHub
© 2017 ZhouJiatao
由 Hexo 强力驱动
主题 - NexT.Muse