以后题目多的话会进行分类,请持续关注
面试题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新值 |