iOS 复习题(二)
1.#import和#include的区别 @class?
@class一般用于头文件中需要声明该类的某个实例变量的时候用到,在m文 件中还是需要使用#import
而#import比起#include的好处就是不会引起交叉编译
2. readwrite,readonly,assign,retain,copy,nonatomic 属性的作用
@property是 一个属性访问声明,扩号内支持以下几个属性:
1,getter=getName,setter=setName,设置setter与 getter的方法名
2,readwrite,readonly,设置可供访问级别
2,assign,setter方法直接赋值,不进行任何retain操作,为了解决原类型与环循引用问题
3,retain,setter方法对参数进行release旧值再retain新值,所有 实现都是这个顺序(CC上有相关资料)
4,copy,setter方法进行Copy操作,与retain处理流程一样,先旧值release,再 Copy出新的对象,retainCount为1。这是为了减少对上下文的依赖而引入的机制。
5,nonatomic,非原子性访问,不加同步, 多线程并发访问会提高性能。注意,如果不加此属性,则默认是两个访问方法都为原子型事务访问。锁被加到所属对象实例级(我是这么理解的...)。
3.在一个对象的方法里面:self.name= “object”;和 name =”object” 有什么不同吗?
答:
self.name ="object":会调用对象的setName()方法;
name = "object":会直接把object赋值给当前对象的name属性。
4.请简述self.name= nil的机制,以及与[namerelease]的区别?
self.name =nil; //使用nil参数调用setName:方法
[name release]生成的访问器将自动释放以前的name对象
5.请简要说明viewDidLoad和viewDidUnload何时调用
答:
viewDidLoad在view从nib文件初始化时调用,
loadView在controller的view为nil时调用。
此方法在编程实现view时调用,view控制器默认会注册memory warning notification,
当view controller的任何view没有用的时候,
viewDidUnload会被调用,在这里实现将retain的view release,如果是retain的IBOutlet view 属性则不要在这里release,IBOutlet会负责release 。
6.实例化一个UITableView对象,要求写出关键语句?
答:UITableView *my = [[UITableView alloc]initWithFrame:<(CGRect)frame> style:<(UITableViewStyle)style>];
my.delegate = self;
my.dataSource = self;
首先需要分配空间设置表格类型
然后需要设置两个必须的委托对象。
7.使用sql语句查询出省名以湖开头,邮编为436001所在的市区?(5分)(表名及字段名自定义)
select*fromcitys where postcode=436001 and province=’湖%’;
8.打印结果
main()
{
int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);
printf("%d,%d",*(a+1),*(ptr-1));
}
答:2,5
*(a+1)就是a[1],*(ptr-1)就是a[4],执行结果是2,5
&a+1不是首地址+1,系统会认为加一个a数组的偏 移,是偏移了一个数组的大小(本例是5个int)
int *ptr=(int *)(&a+1);
则ptr实际 是&(a[5]),也就是a+5
原因如下:
&a是数组指针,其类型为 int (*)[5];
而 指针加1要根据指针类型加上一定的值,不同类型的指针+1之后增加的大小不同。
a是长度为5的int数组指针,所以要加 5*sizeof(int)
相关新闻>>
- 发表评论
-
- 最新评论 更多>>