1 问:手机屏幕分辨率是如何确定的?
答:屏幕分辨率分为点以及像素两种。Iphone4中是320*480点。但是其像素的缩放比例是2x。因此其像素分辨率是640*960。
2 问:+号定义的方法和-号定义的方法有什么区别?
答:(1)+号表示类的方法或者静态方法,-号表示实例的方法。
(2)类的方法在类中可以直接引用,实例的方法必须经过实例化之后才能引用。
3 问:IOS的架构层共有几层?分别是哪几层?
答: 共分为四层,分别是coco Touch层 多媒体层 核心服务层 核心OS层
4 问:IOS中定义的实例变量可以在其它类中使用吗?
答:IOS中定义的实例变量一般是私有的,只能本类调用。不能在其它类中使用。
5 问:#import和#include有什么区别?
答: 在c语言中采用#include包含头文件,在OC中使用#import包含头文件。相比于#include来说,#import可以有效的防止头文件的重复引用。
6 问:什么是MVC?
答: MVC :模型视图 控制器。模型表明你的程序是什么,实现了什么功能,完成了哪些工作。视图表明用户所看到的视图。控制器表明如何将你所做的展示给用户。三者是紧密联系不可分割的。M可以与C交互,但M不能直接与V交互。M与C之间可以通过API、KVO等多种方式交互。C与V之间可以通过outlet、action等实现交互。所有的View都是视图层的,它应该独立于模型层,由视图控制层来控制。所有的用户数据都是模型层,它应该独立于视图。所有的ViewController都是控制层,由它负责控制视图,访问模型数据。
• Controller可以直接和Model通信
• Controller也可以直接和View通信
• Model和View永远不能直接通信
• iOS中View和Controller的通信是透明和固定的,主要通过outlet和action实现
• View使用Delegate接口和Controller同步信息
• View不直接和数据通信,使用dataSource接口从Controller处获取数据
• View的delegate和dataSource一般就是Controller
• Controller负责为View翻译和格式化Model的数据
• Model使用Notification & KVO的方式分发数据更新信息,Controller可以有选择的监听自己感兴趣的信息。
• View可以监听广播信息,但一般不是Model发出的信息
一个完整的App就是很多MVC的集合
7 问:KVO与KVC的含义与区别?
答:KVO:Key-ValueObserving可以简单的理解为监听某一个已注册的关键词,通过观察这个关键词的变化来实现某些具体的功能。
KVC:
8 问:nil Nil null的区别?
答: nil指向oc的对象,Nil指向OC的类,null可以指向任何类型,一般在c语言中使用。
9 问:什么是多继承?c、c++、oc中有多继承吗?
多继承是指一个类具有多个父类的情况。c和oc中没有多继承的概念。c++中有多继承的概念。oc中多重继承是用protocol 委托代理来实现的。
10 问: OC中如何进行内存管理?
答: OC中目前多使用的是ARC(自动引用计数的内存管理模式)。采用这种模式不用手动的保留、释放所创建的内存。当引用计数值为0的时候,相应的内存被释放掉。
11 问:self和super的区别?
答: self有点像c++中的this,super类似于c++中父类进行调用。在实际使用中,self一般指向当前调用方法的类。Super调用方法的时候,一般是为了告诉编译器,这个所调用的方法是父类的方法,而非本类中的方法。
答: xcode下经常使用的文件类型有:.c.h .m .mm .cpp .hpp .o等。其中.c文件支持c语言,.h文件可以是c、c++、oc的头文件,.m支持c、oc,.mm支持c、c++、oc。.cpp支持c++语言。.hpp可以看作是c++的原文件与头文件混编得到的。.o是xcode下的编译文件。
15 问:ios中能否使用静态库或者动态库?
答: apple禁止iphone使用动态链接库,但可以使用静态链接库。可以通过Cocoa TouchStatic Library编译静态链接库。也可以通过makefile编译声称libxxx.a的静态链接库文件来使用。
16 问:对于语句NSString*obj = [[NSData alloc] init]; obj在编译时和运行时分别时什么类型的对象?
答:编译时是NSString的类型;运行时是NSData类型的对象。
答: @package 类似C语言中变量和函数的私有扩展。一般最长用于框架类的实例变量。使用@private太限制,使用@protected或者@public又太开放。
@public可以被该类以及其它类直接调用。@private可以在该类中使用,但不能在其子类中使用。@protected可以在该类以及此类的子类中使用。对于64位图像,这样的成员变量可以在实现这个类的图像中随意访问。
18 问:#define声明一个常数,用以表明1年中有多少秒
答: #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL
19 问:进程与线程的区别和联系?
答: 进程和线程都是操作系统中程序运行的基本单元。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉。所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
20 问:堆和栈的区别
答: 1.申请大小:栈的大小一般是固定的,如windowns中一般是1、2M左右。
堆的存储空间是不连续的,大小上较为灵活。
2 分配方式:堆都是动态分配的,必须手动释放。栈有静态分配和动态分配两种。由编译器控制。
栈先进后出,效率较高。
21 问:ststic关键词的作用
答: 在函数体内定义的static变量的作用范围为该函数体。仅分配一次内存空间。相比较于auto变量来说,auto变量每次运行到auto变量的时候才进行内存分配,当程序不再需要这个变量的时候立即释放掉。在模块内的 static 函数只可被这一模块内的其它函数调用。在类中的 static 成员变量、函数属于整个类所拥有。
22 问:oc的优缺点
答: objc优点:
1) Cateogies 2)Posing 3)动态识别 4)指标计算 5)弹性讯息传递 6) 不是一个过度复杂的 C 衍生语言 7) Objective-C 与 C++ 可混合编程
2) objc缺点:
1) 不支援命名空间 2) 不支持运算符重载 3) 不支持多重继承
23 问:深拷贝和浅拷贝的区别?
答: 浅拷贝是指新建一个新的指针,用于指向已经存在的内存空间。浅拷贝执行完之后,指针增加了一个,内存空间并没有增加。深拷贝是指开辟了一个新的内存空间指向这个新的内存空间。浅拷贝容易发生内存反复释放的错误。
24 问:如果不想修改原始的类,而又不使用子类,那么如何增加在类中增加一个新的方法呢?
答: 在OC中提供了一个新的手段来实现这个功能。OC中可以采用分类的方法来实现。例如
SomeClass.h
@interface SomeClass : NSObject{
}
-(void) print;
@end
分类的做法
@interface SomeClass (Hello)
-(void)hello;
@end
分类只能添加方法而不能添加实例变量。(hello为分类的名称)当然后面还要添加implementation
Extension(类扩展)是Category。Extension是Category的一个特例,其名字为匿名(为空),并且新添加的方法一定要予以实现。(Category没有这个限制)。
25 问:ViewController的 didReceiveMemoryWarning如何被调用?
答: 当ViewController收到内存不足的警告时会调用viewDidUnload方法。[supper didReceiveMemoryWarning]; 将viewController的view的所有subView移除,将view本身释放。
26 问:delegate委托和protocol协议
委托指明对象是当前方法的接受者。
A中有一个方法fun1,B想访问A中的方法。那么A和B可以约束一个共同的规则,将fun1放到协议中,那么B在访问A的时候就不必通过A来访问,可以利用委托的方式,访问协议中的fun1。
人们经常将委托与协议来一起使用,其实委托可以单独使用。
|
|