1、内存管理语义
- assign
设置方法只会执行针对“纯量类型”(基本数据类型)的简单赋值操作。
- strong
此特质表明了属性定义了一种“拥有关系”,该属性设置新值时,设置方法会先保留新值,并释放旧值,然后在将新值设置上去。
- weak
此特质表明了该属性定义了一种“非拥有关系”。设置新值时,设置方法即不保留新值,也不释放旧值。此特质同
assign类似,然后在属性所指的对象遭到摧毁时,属性值也会清空(nil out)。
- unsafe_unretained
与assign相同,但是它适用于
对象类型,该特质表达一种非拥有关系('不保留'),当目标对象遭到摧毁时,属性值不会自动清空(不安全,unsafe),这一点与weak有区别。
- copy
此特质所表达的所属关系与
strong类似。然后设置方法并不保留新值,而是将其“拷贝”(copy)。
2、NSString类型的属性为什么要用copy进行修饰?
因为传递给设置方法的新值有可能是指向一个NSMutableString 类的实例。这个类是NSString 子类,表示一种可以修改其值的字符串,此时若是不拷贝字符串,那么设置完属性之后,字符串的值可能会在对象不知情的情况下遭人更改。所以,这个时候需要拷贝一份“不可变”的字符串,确保对象中的字符串值不会无意间变动。只要实现属性所用的对象是“可变的”,就应该在设置新属性值时拷贝一份。
3、__weak 与 __strong 的区别是什么?
4、socket连接和http连接的区别?
-
http连接:就是所谓的短连接,即客户端向服务器端发送一次请求,服务器端响应后连接即会断掉。
-
socket 连接就是所谓的长连接,理论上客户端和服务器端一旦连接起来将不会主动断掉;但是由于各种环境因素可能会使连接断开,比如说:服务器或客户端主机“宕机了”、“网络故障”,或者两者之间长时间没有数据传输,网络防火墙可能会断开该连接以释放网络资源。所以当一个socket连接中没有数据的传输,那么为了维持连接需要发送心跳消息。(心跳消息格式是开发者自己定义的)。









网友评论