本文提供两种简单的AttributedString的生成方式
iOS中的NSAttributedString一直觉得不太好用,每次要加一个稍微复杂点的特征字符串就很麻烦,你可能会看到这样的代码
1 | let attrS = NSMutableAttributedString(string: "回忆是抓不到的月光,") |
创建一个不太复杂的字符串就需要很长的代码,而且不是很直观。
iOS中的NSAttributedString一直觉得不太好用,每次要加一个稍微复杂点的特征字符串就很麻烦,你可能会看到这样的代码
1 | let attrS = NSMutableAttributedString(string: "回忆是抓不到的月光,") |
创建一个不太复杂的字符串就需要很长的代码,而且不是很直观。
首先我们都知道在iOS应用启动的时候会调用所有类和其分类的+load方法。子类的load方法会在父类方法执行完成之后执行,分类的+load会在主类执行之后执行。不可继承,子类没有实现的时候,文件加载的时候是不会调用父类的load方法的。那么为什么+load的方法会有这样的特性,runtime又有哪些巧妙的处理呢。今天我们来刨根问底一下+load方法。
(KVC)键值编码相信大家都不陌生,常用来访问对象属性,也可以访问集合属性。还有一些可以给通过此方法访问一些系统没有开放的API,通过KVC的方式进行使用。(今天的重点不在这里,有需要自己看)
它返回指定的键路径对应的值。如果keyPath中包含不符合规定的字符(比如没有这个属性字符)就会接收到一条valueForUndefinedKey:消息。
Protocol Buffer是google于2008推出的一种数据交换的格式,它独立于语言,独立于平台。,google 提供了多种语言的实现,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 和 json 进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。现今经过多个版本迭代已经到了3.x版本
其实说白了Protocol Buffer就是一个协议,和解释器。可以用proto文件把model或者其他数据序列化Or反序列化(把二进制数据解析为Model或者把Model转为二进制数据)。它添加了多语言的支持,在不同语言下,遵守同样的协议(使用同样的proto),这样就可以保证在不同端,数据可以交互,而且不用担心数据的序列化问题。
下面是支持的语言:
Language | Source |
---|---|
C++ (include C++ runtime and protoc) | src |
Java | java |
Python | python |
Objective-C | objectivec |
C# | csharp |
JavaNano | javanano |
JavaScript | js |
Ruby | ruby |
Go | golang/protobuf |
PHP | php |
Dart | dart-lang/protobuf |
不知道大家有没有经历过,公司给配个mac,最低配,没有ssd,Cpu1.4GHz。全量编译一次一二十分钟,增量编译也要至少三分钟,尤其是在调UI的时候。真的是能捉急死人!
搜罗各地找到一个比较实用的加快编译的方法。
这个功能用的最多的就是在微博里面,里面有用户名@南山忆,网址http://www.jianshu.com/users/774b1d5616a7/latest_articles,#话题# 等需要特别现实,还需要有点击事件,这种情况下普通的label显示已经满足不了需求了。需要我们来自己写一个可实现相应功能的label。
好了废话不多说,让我们开始,大致流程如下:
NSString我们必不可少的类,但是在你@property的时候,到底是用Strong,还是Copy修饰。你用对了吗?
1 | @property (nonatomic, strong) NSString *strongStr; |
这里声明了两个NSString变量,一个用strong修饰,另一个用copy来修饰,下面我们来用一个NSString对两个string赋值。
在开发过程中我们总会遇到各种各样的小问题,有些小问题并不是十分容易解决。在此我就总结一下,我在开发中遇到的各种小问题,以及我的解决方法。比较普遍的我就不再提了,这里主要讲一些你可能不知道的(当然,也有可能你都知道,大神就不必往下看了)
你是不是也遇到过这样的问题,一个button或者label,只要右边的两个角圆角,或者只要一个圆角。该怎么办呢。这就需要图层蒙版来帮助我们了1
2
3
4
5
6
7
8CGRect rect = CGRectMake(0, 0, 100, 50);
CGSize radio = CGSizeMake(5, 5);//圆角尺寸
UIRectCorner corner = UIRectCornerTopLeft|UIRectCornerTopRight;//这只圆角位置
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:rect byRoundingCorners:corner cornerRadii:radio];
CAShapeLayer *masklayer = [[CAShapeLayer alloc]init];//创建shapelayer
masklayer.frame = button.bounds;
masklayer.path = path.CGPath;//设置路径
button.layer.mask = masklayer;
举例为button,其它继承自UIView的控件都可以