iOS 复习题
1、iPhone5的屏幕分辨率大小为 1136* 640 ?
屏幕分辨率:用于量度位图图像内数据量多少的一个参数。通常表示成ppi(每英寸像素Pixel per inch)。屏幕物理尺寸不变,分辨率越高,每单位面积内包含的细节(像素点)越多。
2、structstrA { int a; float b; char c; } expA;
printf("%ld",sizeof(expA)); 输出结果为 12 ?
该问题涉及编译器的“内存对齐”问题:
现代计算机中内存空间都是按照byte(字节)划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。
对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。其他平台可能没有这种情况,但是最常见的是如果不按照适合其平台的要求对数据存放进行对齐,会在存取效率上带来损失。比如有些平台每次读都是从偶地址开始,如果一个int型(假设为 32位)如果存放在偶地址开始的地方,那么一个读周期就可以读出,而如果存放在奇地址开始的地方,就可能会需要2个读周期,并对两次读出的结果的高低 字节进行拼凑才能得到该int数据。显然在读取效率上下降很多。这也是空间和时间的博弈。
通常,我们写程序的时候,不需要考虑对齐问题。编译器会替我们选择适合目标平台的对齐策略。当然,我们也可以通知给编译器传递预编译指令而改变对指定数据的对齐方法。
但是,正因为我们一般不需要关心这个问题,所以因为编辑器对数据存放做了对齐,而我们不了解的话,常常会对一些问题感到迷惑。最常见的就是struct数据结构的sizeof结果,出乎意料。
对于结构体来说,按成员中所占字节最大的是float类型,占用4个字节,一共有3个成员,所以总的占用字节为:4 * 3 = 12.
可通过编译器命令来设定:
#progma pack (2) /*指定按2字节对齐*/
3、@property语法中readonly/readwrite,atomic/nonatomic的作用,@dynamic的作用?
@Property:Objective-C语言关键词,与@synthesize配对使用。xcode4.5以及以后的版本,@synthesize可以省略。
功能:让编译器自动编写一对与数据成员同名的方法声明来省去读写方法的声明。
声明property的语法为:
@property (参数1,参数2) 类型 名字;
如:@property(nonatomic,retain) UIWindow*window;
其中参数主要分为三类:
读写属性: (readwrite/readonly)
setter语意:(assign/retain/copy)
原子性: (atomicity/nonatomic)
各参数意义如下:
readwrite:同时产生setter\getter方法
readonly:只产生简单的getter,没有setter。
assign:默认类型,setter方法直接赋值,而不进行retain操作
retain:setter方法对参数进行release旧值,再retain新值。
copy:setter方法进行Copy操作,与retain一样
atomic:原子性,它没有一个如果你没有对原子性进行一个声明(atomic or nonatomic),那么系统会默认你选择的是atomic。
相关新闻>>
- 发表评论
-
- 最新评论 更多>>