正文
1.(&arrayName + 1):&arrayName是数组的地址(等价于指向arrayName数组的指针)
2.增加 1 会往后移动16个字节,开始是4个字节的位置,移动后就是16个字节后面的位置(也就是目前位置是20个字节)
3.最后又赋值给,int类型的指针p(int类型占4个字节)
4.所以(p - 1)就是减去4个字节,变成为16个字节的位置,输出的(p - 1)值为40
int *p = (int *)(&arrayName + 1);
NSLog(@"%d", *(p - 1));//输出结果为 40
5.#import 和#include有 么区别?@class呢?#import <>和 #import"" 有 么区别?
import是OC导入头文件的关键字,#include是C/C++导入头文件的关键字
使用#import只导入一次不会重复导入,相当于#include和#pragma once;(使用#include可能会出现循环引用,使用#pragma once消除这种可能)
@class一般用于声明某个字符串作为类名使用,它只是声明了一个类名,没有导入.h文件中的内容,不会引起交叉编译问题
import< >代表导入系统自带的框架
import" "代表导入我们自己创建的文件,导入的使我们.h文件,也就是头文件
6.属性readwrite.readonly,assign,retain,copy,nonatomic 什么作用 ? 在哪种情况下 ?
readwrite 是可读可写特性;需要生成getter方法和setter方法时(补充:默认属性,将生成不带额外参数的getter和setter方法(setter方法只有一个参数))
readonly 是只读特性 只会生成getter方法 不会生成setter方法 ;不希望属性在类外改变
assign 是赋值特性,setter方法将传入参数赋值给实例变量;仅设置变量时;
retain 表示持有特性,setter方法将传入参数先保留,再赋值,传入参数的retaincount会+1;
copy 表示拷贝特性,setter方法将传入对象复制一份;需要完全一份新的变量时。
nonatomic 非原子操作,决定编译器生成的setter getter是否是原子操作,atomic表示多线程安全,一般使
用nonatomic
7.IBOutlet 连出来的视图属性为什么可以被设置成weak?
在 storyboard 中添加一个控件引用关系是这样的(以 UIbutton 为例): UIviewController -> UIview -> UIbutton
此时 UIviewController 强引用着 UIview , UIview 强引用着 UIbutton , IBoutlet 连线到控制器的. m 或者. h 中作为视图的属性时用 weak 修饰就可以了, (觉得用 strong 修饰也可以但是没有必要)
添加到子控件也是强引用: UIbutton 就是添加到了 UIviewController 的 view 上
8 预处 指令define 声明 个常数, 以表明 中有多 少秒(忽 闰 问题)。
define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL
9.重写-个NSString类型的,retain 式声明name属性的 setter和getter 法(MRC)
属性的三大特性:语义特性,原子特性,读写特性.
同时重写setter和getter方法,@synchronized name = _name,关联属性和实例变量
如 -(void)setName:(NSString *)name{
if(_name != name){
[_name retain];
[_name release];
_name = name;
}
}
-(NSString *)name{
return [[_name retain]autorelease]
}
10.分析json、xml 的区别? json、xml 解析 式的底层是如何让处理的
(一)JSON与XML的区别:
(1)可读性方面:基本相同,XML的可读性比较好;
(2)可扩展性方面:都具有良好的扩展性;
(3)编码难度方面:相对而言,JSON的编码比较容易;
(4)解码难度:JSON的解码难度基本为零,XML需要考虑子节点和父节点;
(5)数据体积方面:JSON相对于XML来讲,数据体积小,传递的速度比较快;
(6)数据交互方面:JSON与javascript的交互更加方便,更容易解析处理,更好的数据交互;
(7)数据描述方面:XML对数据描述性比较好
(8)传输速度方面:JSON的速度远远快于XML。
(二)JSON与XML底层实现原理:
(1)JSON底层原理:遍历字符串中的字符,最终根据格式规定的特殊字符,比如{}、[]、:等进行区分,{}号表示字典,[]号表示数组,:号是字典的键和值的分水岭,最终仍是将JSON转化为字典,只不过字典中的值可能是“字典、数组或者字符串而已”。
(2)XML底层原理:XML解析常用的解析方法有两种:DOM解析和SAX解析;DOM采用的是树形结构的方式访问XML文档,而SAX采用的是事件模型;DOM解析把XML文档转化为一个包含其内容的树,并可以对树进行遍历,使用DOM解析器的时候需要处理整个XML文档,所以对内存和性能的要求比较高;SAX在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,他可以激活一个回调方法,告诉该方法指定的标签已经找到,SAX对内存的要求通常会比较低,因为他让开发人员自己来决定所要处理的tag,特别是当开发人员只需要处理文档中所包含部分数据时,SAX这种扩展能力得到了更好的体现。