当前位置:   article > 正文

iOS 面试题及答案20道1~20(一)_oc和swift面试题

oc和swift面试题

以后题目多的话会进行分类,请持续关注
面试题20道:

1.#import和#include的区别,@class代表什么?
2.谈谈Objective-C的内存管理方式和过程?
3.Objective-C有私有方法吗?私有变量呢?
4.Objective-C的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?为什么?
5.类(class)和结构体(struct)有什么区别?
6.Swift是面向对象编程还是函数式的编程语言?
7.Objective-C中的函数式编程?
8.Swift中可选型(optioonal)?
9.OBjective-C当中有没有可选类型?
10.Swift中,什么是泛型(Generics)?
11.Swift说明比较关键字Open、Public、internal、File-private和private关键字
12.Swift中说明并比较关键字:Strong,Weak和Unownet
13.在Swift中,如何理解copy-on-write
14.在Swift中什么是属性观察(property observer)?
15.在Swift中mutating的作用。
16.在Swift中protocol怎么定义成员变量?
17.Swift在结构体中如果修改成员变量?
18.Swift如果实现(||)操作?
19.输入任意一个整数,输出的是输入整数的+2、+3、+4。。。 请定义一个函数来实现。
20.写一个函数,求0~100(包括0和100)中为偶数并且恰好是其他数字平方的数字?

1.#import和#include的区别,@class代表什么?

#import会代入头文件的所有信息,包括实体百年来那个和方法等,
#include也是带入文件的所有信息,跟#import差异是在#import引用的文件只会被引用一次,不会递归包含的问题
@class代表的意思是,不需要导入文件内容,也不需要知道如何定义的,我只告诉编译器这个就是个类的名称,

2.谈谈Objective-C的内存管理方式和过程?

在App运行时创造了大量的对象,Objective-C中的对象时存储在堆中的,系统并不会自动释放堆中的内存(基本类型也就是值类型是由系统自己管理的,放在栈上),so,OBC的内存管理是需要开发去手动维护的。

一、引用计数

在Xcode4.2以后的版本中都是引入了ARC机制,程序编译时xcode可以自动给你的代码添加内存释放代码,但是如果编写释放内存的代码就会报错,所以需要在xcode中主动关闭ARC,这样才能有助于ObjC的理解。

在ObjC中,每个对象内部都会有一个retainCount整数,叫"引用计数",当一个对象创建之后它的引用计数为1,当调用这个对象的alloc、retain、new、copy方法之后引用计数会在动在原有的基础上加1,当调用这个对象的release方法之后它的引用计数会减1,如果一个对象的引用计数为0,则系统会自动调用这个对象的dealloc方法来销毁这个对象,在手动管理内存的时候需要遵循一个原则谁创建、谁释放。

当用户调用方法的时候实际上是在向这个对象发送一条消息,且ObjC中允许向一个nil的对象发送消息,在释放完成以后最好直接给这个对象设置为nil,为了防止野指针的出现,当这个对象的引用计数为0的时候,系统会自动调用dealloc方法来销毁对象,可以在这里将所有的野指针设置为nil。

二、属性参数

@property自动实现你的属性的getter、setter方法,并且提供一些参数供选择

参数 详解
atomic 对属性加锁,多线程下线程安全,默认值
nonatomic 对属性不加锁,多线程不安全,但是速度快
readwrite 生成getter、setter方法,可读可写,默认值
readonly 只生成getter方法,只读
assign 直接赋值,默认值
weak 相当于assign,多了一点就是对象被干掉时,weak引用自动设置为nil
retain 先release原来的值,再retain新值
Strong 跟retain一样,在ARC中,不需要手动释放内存
copy 先release原来的值,在copy新值
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/1022159
推荐阅读
相关标签
  

闽ICP备14008679号