iOS开发基础笔试题-(1)
2020-01-15 09:59
309 查看
前言
以下部分题目来源于网络,笔者在此处收集起来,既是要巩固自我,也希望能够帮助到同样需要的人!参考答案均为笔者所写,其有疑问或者出错之处,请在评论中提出,谢谢!不喜勿喷!
1. #import和#include的区别?
参考答案:
#import是
Objective-C导入头文件的语法,可保证不会重复导入。
#include是
C/C++导入头文件的语法,如果是
Objective-C与
C/C++混编码,对于
C/C++类型的文件,还是使用
#include来引入,这种写法需要添加防重复导入的语法。
2. @class的作用
@class一般用于头文件中通过前向声明,就可以声明了,但是在
.m文件中还是需要使用
#import进来的。它的作用只是前向声明。
3. 用NSLog函数输出一个浮点类型,结果四舍五入,并保留一位小数
参考答案:
1 2 3 4 | float money = 1.011; NSLog(@"%.1f", money); |
使用
%f来格式化,其中要保留一位小数,因此再用
%.1f就是保留一位。
4.property属性的修饰符有什么样的作用
参考答案:
property是属性访问声明,扩号内支持以下几个属性:
getter=getName
、setter=setName
:设置setter
与getter
的方法名readwrite
、readonly
:设置可供访问级别assign
:方法直接赋值,不进行任何retain操作,为了解决原类型与环循引用问题retain
:其setter
方法对参数进行release
旧值再retain
新值,所有实现都是这个顺序copy
:其setter
方法进行copy
操作,与retain
处理流程一样,先对旧值release
,再copy
出新的对象,retainCount
为1。这是为了减少对上下文的依赖而引入的机制。nonatomic
:非原子性访问,不加同步, 多线程并发访问会提高性能。注意,如果不加此属性,则默认是两个访问方法都为原子型事务访问。
这里有一篇文章介绍:iOS中的property的修饰符如何使用
5. self.name=@object和name=@object有什么不同?
参考答案:
self.name =”object”:会调用对象的
setName()方法;
name = “object”:会直接把
"object"字符串赋值给当前对象的
name属性。
6. viewDidLoad、loadView和viewDidUnload何时调用
参考答案:
viewDidLoad在
view加载完成时调用,
loadView在
controller的
view为
nil时调用。对于
viewDidUnload现在已经不能直接调用了。
7. objective-c中的可变与不可变词典
参考答案:
可变字典就是可以增、删、改操作的字典,对应于
NSMutableDictionary类型。
不可变字典就是不能执行增、删、改操作的字典,对应于
NSDictionary类型。
8.Objective-C的内存管理
参考答案: 现在内存管理几乎都采用
ARC,也就是
Automatic Reference Counting,意思是自动引用计数。由编译器在编译时自动为添加
retain、
release等代码。
如果问的
MRC,也就是
Manual Reference Counting,意思是手动内存管理。
黄金法则:谁使对象的引用计数+1,不再使用该对象时,谁就应该使该对象的引用计数-1。
9. 自动生成getter/setter方法
参考答案: 对于以前的代码,那时还没有
property,使用这样的方法来创建:
1 2 3 4 - (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还会有一部分逻辑,比如说:
1 2 3 4 5 6 7 8 9 10 11 12 13 @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方法
假设声明属性:
1 2 3 @property (nonatomic, copy) NSString *blogName; 重写这个属性的
getter/setter方法:参考答案:
这里一旦连
getter方法也重写,编译器不会给我们自动生成成员变量_blogName,因此我们需要在类的声明中添加一个成员变量_blogName:
1 2 3 4 5 6 7 @interface Demo () { NSString *_blogName; } @end 在自动内存管理下(
ARC):
1 2 3 4 5 6 7 8 9 10 11 12 - (void)setBlogName:(NSString *)aName { if (_blogName != aName) { _blogName = nil; _blogName = [aName copy]; } } - (NSString *)blogName { return _blogName; } 对于手动内存管理(
MRC):
1 2 3 4 5 6 7 8 9 10 11 12 13 - (void)setBlogName:(NSString *)aName { if (_blogName != aName) { [_blogName release]; _blogName = nil; _blogName = [aName copy]; } } - (NSString *)blogName { return _blogName; }
转载于:https://www.cnblogs.com/Horkly/p/5456884.html
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- ios开发工程师笔试基础题
- ios开发工程师笔试基础题
- iOS开发工程师笔试基础题
- ios开发工程师笔试基础题
- iOS开发零基础教程之生成git所需的SSH keys
- iOS开发基础:strong、weak、assign、retain
- ios开发基础控件笔记
- IOS开发基础知识--碎片2
- ios开发-UI基础-应用管理(单纯界面)
- 11步教你成为一名初级的iOS开发——零基础
- 小白学开发(iOS)基础C_static和extern对变量的作用(2015-07-20)
- iOS 开发基础UIControl事件
- IOS开发基础
- Objective-C(十六、内存管理,自动释放池,ARC,强指针,弱指针,方法族)——iOS开发基础
- IOS开发基础知识--碎片32
- ios开发基础知识
- Objective-C ,ios,iphone开发基础:使用GDataXML解析XML文档,(libxml/tree.h not found 错误解决方案)
- IOS开发基础知识--碎片51
- IOS开发UI基础UIPageControl的属性
- iOS开发UI基础—02手写控件,frame,center和bounds属性