: .
iOS 工程师面试笔试题
对象的引用计数+1,不再使用该对象时,谁就应该使该对象的
引用计数-1。
9. 自动生成 getter/setter 方法
参考答案:
对于以前的代码,那时还没有 property,使用这样的方法来创建:
- (void)setName:(NSString *)aName;
- (NSString *)name;
在后面有了 property,直接使用***@property (nonatomic, copy) NSString
*name 这样的方法来声明,编译器会自动生成 getter/setter 方法并生成一个
_name 成员变量。
10. 什么是 MVC
参考答案:
我相信大部分人在被问到这个问题时,都会回答 M 就是 Model,V 就是 View,C
就是 Controller。这都是停留在概念上的回答,明显没有什么工作经验。对于
一个对框架和架构有一定的思想的人,回答时会从项目的耦合度、团队开发如何减少冲突、如何降低团队与团队之间的沟通成本、如何将 M、V、C 之间按照
既定的标准建立沟通的桥梁。
Model 用于处理数据,通常来说,Model 中会包含多个字段,用于存储数据。但
是,Model 还会有一部分逻辑,比如说:
***@interface TestModel: HYBBaseModel
// 这个是接口返回的字段,1 表示 XXX,2 表示 YYY,3 表示 ZZZ
***@property (nonatomic, assign) NSUInteger type;
// 这个不是接口返回的字段,但是由于`type`字段是一个数值,不是`view`需
要显示的数据
// 所以我们最好将逻辑统一放到这里来,外部只管获取最终显示需要的值即
可。即使哪天接口
// 返回的字段变化或者增加什么新的值,只需要处理这个模型内部就好了。
***@property (nonatomic, copy, readonly) NSString relationship;
***@end
对于 View,不应该包含逻辑,应该根据模型直接获取数据。
对于 Controller,大部分交互逻辑都集中到了这里,所有 View 需要的数据,
都是通过 Controller 提取 Model 然后交给 view 去显示数据。
11. 重写 getter/setter 方法
假设声明属性:***@property (nonatomic, copy) NSString *blogName;
重写这个属性的 getter/setter 方法:
参考答案:
这里一旦连 getter 方法也重写,编译器不会给我们自动生成成员变量
_blogName,因此我们需要在类的声明中添加一个成员变量_blogName:
***@interface Demo () {
NSString *_blogName;
}
***@end
在自动内存管理下(ARC):
- (void)setBlogName:(NSString *)aName {
if (_blogName != aName) {
_blogName = nil;
_blogName = [aName copy];
}
}
- (NSString *)blogName {
return _blogName;
}对于手动内存管理(MRC):
- (void)setBlogName:(NSString *)aName {
iOS工程师面试笔试题 来自淘豆网www.taodocs.com转载请标明出处.