0%
iOS 多线程编程 ——iOS 开发的一座大山
nullable 与 nonnull 的使用
《Objective-C 编程》19.@property
属性
@property
尽管可以使用 obj->arr 的形式去强制读取对象的成员变量,但是良好的编程形式是对外界提供成员变量的读写接口。**@property** 关键字提供了外界对成员变量的访问接口,其本质是自动为某一个属性生成 set 和 get 方法。
根据不同的需要,可以添加 readonly(只读,相当于只添加 get 不添加 set 方法)或者 readwrite(读写,如果不添加则为默认);
还有三种赋值方式可选 :assign(直接赋值,通常用于基本类型),retain(释放旧值,增加新的 retaincount),copy(常用于字符串,生成一个新的拷贝).
property 的属性特性只对 setter 方法有效,对 getter 方法无效
格式:
@property (原子性©,内存管理©,读写性©) NSString *string;
AFNetworking—— 优雅的网络框架
Reachability—— 一个用于判断网络可达性的库
- GitHub:tonymillion/Reachability
- Star:6500+
附上 3 个网络可达性库:
- Apple 官方 Demo:Reachability
- 本项目:tonymillion/Reachability
- AFNetworking 的
AFNetworkReachabilityManager
类
WARNING there have been reports of apps being rejected when Reachability is used in a framework. The only solution to this so far is to rename the class.
⚠️该类库可能使用了与 Apple 源码相同的类名,因此提交应用审核时,可能会被拒绝。目前为止,唯一的解决方法就是更改类名。
Tomcat 安装及配置
高性能 iOS 应用开发 —— 创建复合视图的正确方式
声明:本文参考自高性能 iOS 应用开发 - 高拉夫・瓦依希 第 6 章。
创建复合视图的三种方式:
- 故事版(Storyboard)或者 NIB 文件;
- 手写代码,创建并添加 UI 控件;
- 手写代码,直接绘制视图;
NSPredicate
NSPredicate 谓词
cocoa 中提供了 NSPredicate 类,指定过滤器的条件。将符合条件的对象保留下来。
正则表达式
// 待匹配字符串
NSString *string = @"201709----201710";
// --------------------------------
// 1⃣️ NSPredicate
// 正则表达式
NSString *regex = @"^\\d{6}\\D+\\d{6}$";
// 创建 NSPredicate 实例对象
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@",regex];
// 是否匹配
BOOL isMatch = [predicate evaluateWithObject:string];
NSLog(@"%@",isMatch ? @"匹配" : @"不匹配");
// --------------------------------
// 2⃣️ NSString
// 返回匹配到的第一个字符串范围
NSRange range = [string rangeOfString:@"\\d+" options:NSRegularExpressionSearch];
if (range.location != NSNotFound) {
NSLog(@"%@",[string substringWithRange:range]); // 201709
}
// --------------------------------
// 3⃣️ NSRegularExpression
// 创建 NSRegularExpression 实例对象
NSRegularExpression *regularExpression =
[NSRegularExpression regularExpressionWithPattern:regex
options:NSRegularExpressionCaseInsensitive
error:nil];
// 1.查找第一个匹配结果,如果查找不到则返回 nil
NSTextCheckingResult *firstMatch =
[regularExpression firstMatchInString:string
options:NSMatchingReportCompletion
range:NSMakeRange(0, string.length)];
if (firstMatch) {
// 如果匹配到结果,就打印
NSLog(@"%@",[string substringWithRange:firstMatch.range]);
}
// 2.查找字符串中所有的匹配结果
NSArray *matches = [regularExpression matchesInString:string
options:NSMatchingReportProgress
range:NSMakeRange(0, string.length)];
if (matches.count > 0) {
[matches enumerateObjectsUsingBlock:^(NSTextCheckingResult *obj, NSUInteger idx, BOOL * _Nonnull stop) {
NSLog(@"第 %lu 个结果 = %@",idx, [string substringWithRange:obj.range]);
}];
}