而没有点击时,从屏幕的 0 点开始计算。
二、请简述 iOS 中 Push 原理
第一阶段:应用程序把要发送的消息、目的 iPhone 的标识打包,发给 APNS。
第二阶段:APNS 在自身的已注册 Push 服务的 iPhone 列表中,查找 有相应标识的 iPhone,并把
消息发送到 iPhone 。
第三阶段:iPhone 把发来的消息传递给相应的应用程序,并且按照设定弹出 Push 通知。
三、 怎么用 copy 关键字
一般使用 retain 或者 strong 修饰属性时,是使用引用对象的指针指向同一对象,即为同一块内
存地址.只要其中有一个指针变量被修饰时所有其他引用该对象的变量都会被改变。
而使用 copy 关键字修饰在赋值时是释放旧对象,拷贝新对象内容。重新分配了内存地址。以
后该指针变量被修改时就不会影响旧对象的内容了。
copy
只有实现了 NSCopying 协议的对象类型才有效,常用于 NSString 和 Block 。
四、 这个写法会出什么问题
@@property (copy) NSMutableArray *array;
当一个 NSMutableArray 对象使用 initWithArray: 初始化方法创建时,并将该对象赋值给了
array
属性。那么之后 array 执行可变数组的方法,如: removeObjectAtIndex: 时会出现
unrecognized selector sent to instance
的崩溃。原因在于 array 属性在被赋值(setter)的时候默
认执行了 copy 方法后变为了不可变 NSArray 对象。
五、 如何让自己的类用 copy 修饰符?如何重写带 copy 关键字的 setter?
该类必须要实现 NSCopying 协议。实现 - (id)copyWithZone:(NSZone *)zone; 方法。
重写 copy 关键字的 setter 时,需要调用一下传入对象的 copy 方法。然后赋值给该 setter 的
方法对应的成员变量。
六、 怎样防止指针的越界使用问题?
(1)防止数组越界,必须让指针指向一个有效的内存地址。
(2)防止向一块内存中拷贝过多的内容。
(3)防止使用空指针。
(4)防止改变 const 修改的指针。
(5)防止改变指向静态存储区的内容。