要说IO的性能优化就不得不提ZeroCopy(零拷贝),虽然名字叫零拷贝,但其实并不是完全没有拷贝过程,而是尽量减少不必要的拷贝及上下文切换。各种消息队列可以说是将零拷贝技术用到了极致,像Kafka、RocketMQ都用到到了mmap、sendfile等零拷贝技术来提升服务的性能。我们最常用的应用服务Tomcat、Nginx在返回静态资源的时候,都有使用零拷贝技术。普通IO操作以实现类似Tomcat中返回静态资源的功能举例。这个过程一般是读取文件内容,不需要做任何处理直接将读取的数据写入网络Socket中返回给用户,类似下面的伪代码过程。read(file,tmp_buf,len);write
分析:NSString、NSArray、NSDictionary含有对应的可变类型:NSMutableString、NSMutableArray、NSMutableDictionary,他们之间可能进行赋值操作(就是把可变的赋值给不可变的),为确保对象中的字符串值不会无意间变动,应该在设置新属性值时拷贝一份。经常使用copy修饰是因为:1、遵循父类指针可以指向子类对象原理,使用copy修饰是为了让本对象的属性不受外界影响,无论给我传入是一个可变对象还是不可对象,我本身持有的是一个不可变的副本。2、如果我们使用是strong,那么这个属性就有可能指向一个可变对象,如果这个可变对象在外部被修改了,
分析:NSString、NSArray、NSDictionary含有对应的可变类型:NSMutableString、NSMutableArray、NSMutableDictionary,他们之间可能进行赋值操作(就是把可变的赋值给不可变的),为确保对象中的字符串值不会无意间变动,应该在设置新属性值时拷贝一份。经常使用copy修饰是因为:1、遵循父类指针可以指向子类对象原理,使用copy修饰是为了让本对象的属性不受外界影响,无论给我传入是一个可变对象还是不可对象,我本身持有的是一个不可变的副本。2、如果我们使用是strong,那么这个属性就有可能指向一个可变对象,如果这个可变对象在外部被修改了,