iOS笔试题目
2015-07-25 15:41
357 查看
1.属性与成员变量
(1) readwrite,readonly,assign,retain,copy,nonatomic属性的作用
答:@property是一个属性访问声明,扩号内支持以下几个属性:
getter=getName,setter=setName,设置setter与getter的方法名
readwrite,readonly,设置可供访问级别
assign,setter方法直接赋值,不进行任何retain操作,为了解决原类型与环循引用问题
retain,setter方法对参数进行release旧值再retain新值,所有实现都是这个顺序(CC上有相关资料)
copy,setter方法进行Copy操作,与retain处理流程一样,先旧值release,再Copy出新的对象,retainCount为1。这是为了减少对上下文的依赖而引入的机制。
nonatomic,非原子性访问,不加同步,多线程并发访问会提高性能。注意,如果不加此属性,则默认是两个访问方法都为原子型事务访问。锁被加到所属对象实例级(我是这么理解的…)。
(2)copy与retain的区别
copy: 建立一个索引计数为1的对象,然后释放旧对象
retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1
那上面的是什么该死的意思呢?
copy其实是建立了一个相同的对象,而retain不是:
比如一个NSString对象,地址为0×1111,内容为@”STR”
Copy到另外一个NSString之后,地址为0×2222,内容相同,新的对象retain为1,旧有对象没有变化
retain到另外一个NSString之后,地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1
也就是说,retain是指针拷贝,copy是内容拷贝。哇,比想象的简单多了…
(2) 在一个对象的方法里面:self.name= “object”;和_name =”object”有什么不同吗?
答:self.name =”object”:会调用对象的setName()方法;
_name = “object”:会直接把object赋值给当前对象的name属性。
(3) 请简述self.name=nil的机制,以及与[name release]的区别?
答: self.name =nil; //使用nil参数调用setName:方法
[name release]生成的访问器将自动释放以前的name对象
2.宏定义
(1) 用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
答:#define SECONDS_PER_YEAR (unsigned long)(60
* 60 *24
*365)
能想到转换为无符号长整型,需要比较扎实的基础
(2) 写一”标准”宏MIN,这个宏输入两个参数并返回较小的一个
答:懂得在宏中小心地把参数用括号括起来
我也用这个问题开始讨论宏的副作用。
例如:当你写下面的代码时会发生什么事?
least = MIN(i++, b);
结果是:
((i++) <= (b) ? (i++) :(b))
这个表达式会产生副作用,i会作两次++自增操作。
(1) readwrite,readonly,assign,retain,copy,nonatomic属性的作用
答:@property是一个属性访问声明,扩号内支持以下几个属性:
getter=getName,setter=setName,设置setter与getter的方法名
readwrite,readonly,设置可供访问级别
assign,setter方法直接赋值,不进行任何retain操作,为了解决原类型与环循引用问题
retain,setter方法对参数进行release旧值再retain新值,所有实现都是这个顺序(CC上有相关资料)
copy,setter方法进行Copy操作,与retain处理流程一样,先旧值release,再Copy出新的对象,retainCount为1。这是为了减少对上下文的依赖而引入的机制。
nonatomic,非原子性访问,不加同步,多线程并发访问会提高性能。注意,如果不加此属性,则默认是两个访问方法都为原子型事务访问。锁被加到所属对象实例级(我是这么理解的…)。
(2)copy与retain的区别
copy: 建立一个索引计数为1的对象,然后释放旧对象
retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1
那上面的是什么该死的意思呢?
copy其实是建立了一个相同的对象,而retain不是:
比如一个NSString对象,地址为0×1111,内容为@”STR”
Copy到另外一个NSString之后,地址为0×2222,内容相同,新的对象retain为1,旧有对象没有变化
retain到另外一个NSString之后,地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1
也就是说,retain是指针拷贝,copy是内容拷贝。哇,比想象的简单多了…
(2) 在一个对象的方法里面:self.name= “object”;和_name =”object”有什么不同吗?
答:self.name =”object”:会调用对象的setName()方法;
_name = “object”:会直接把object赋值给当前对象的name属性。
(3) 请简述self.name=nil的机制,以及与[name release]的区别?
答: self.name =nil; //使用nil参数调用setName:方法
[name release]生成的访问器将自动释放以前的name对象
2.宏定义
(1) 用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)
答:#define SECONDS_PER_YEAR (unsigned long)(60
* 60 *24
*365)
能想到转换为无符号长整型,需要比较扎实的基础
(2) 写一”标准”宏MIN,这个宏输入两个参数并返回较小的一个
答:懂得在宏中小心地把参数用括号括起来
我也用这个问题开始讨论宏的副作用。
例如:当你写下面的代码时会发生什么事?
least = MIN(i++, b);
结果是:
((i++) <= (b) ? (i++) :(b))
这个表达式会产生副作用,i会作两次++自增操作。
相关文章推荐
- iOS重新设置首界面不能启动问题的解决方法
- BIOS 工作原理
- 【分享】[iOS翻译]Cocoa编码规范
- iOS- 利用AFNetworking(AFN) - 实现文件断点下载
- iOS OC07.2_类的扩展
- iOS- AVSpeechSynthesizer——iOS7语音合成器
- ios下inhouse发布相关代码
- iOS __weak学习碰到的疑问
- iOS下JSON反序列化开源库
- 《慕客网:IOS动画案例之会跳动的登入界面(上)》学习笔记 -Sketch的使用
- iOS应用崩溃日志分析
- Xcode 6下制作通用iOS Framework的脚本
- ios的常用尺寸
- ios获取当前手机wifi名称
- 小白学开发(iOS)OC_组合模式(2015-07-24)
- 小白学开发(iOS)OC_封装_成员变量(set get方法)(2015-07-24)
- 小白学开发(iOS)OC_匿名对象(2015-07-24)
- iOS中如何显示一张图片
- iOS 手势操作:拖动、捏合、旋转、点按、长按、轻扫、自定义
- 上手iOS常见问题——iOS模拟器显示错位问题解决