IOS小知识点3之IOS面试宝典(200例)

以下内容均来自于网络:如有错误之处还请大家批评指正,不过这些题目对付一般的公司应该是没问题了。

1 问:手机屏幕分辨率是如何确定的?

答:屏幕分辨率分为点以及像素两种。Iphone4中是320*480点。但是其像素的缩放比例是2x。因此其像素分辨率是640*960。

2  问:+号定义的方法和-号定义的方法有什么区别?

答:(1)+号表示类的方法或者静态方法,-号表示实例的方法。

        (2)类的方法在类中可以直接引用,实例的方法必须经过实例化之后才能引用。

3  问:IOS的架构层共有几层?分别是哪几层?

答: 共分为四层,分别是coco Touch层 多媒体层 核心服务层  核心OS层

问:IOS中定义的实例变量可以在其它类中使用吗?

答:IOS中定义的实例变量一般是私有的,只能本类调用。不能在其它类中使用。

问:#import和#include有什么区别?

答: 在c语言中采用#include包含头文件,在OC中使用#import包含头文件。相比于#include来说,#import可以有效的防止头文件的重复引用。

问:什么是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的集合

问:KVO与KVC的含义与区别?

答:KVO:Key-ValueObserving可以简单的理解为监听某一个已注册的关键词,通过观察这个关键词的变化来实现某些具体的功能。

KVC

问:nil Nil null的区别?

答:  nil指向oc的对象,Nil指向OC的类,null可以指向任何类型,一般在c语言中使用。

问:什么是多继承?c、c++、oc中有多继承吗?

多继承是指一个类具有多个父类的情况。c和oc中没有多继承的概念。c++中有多继承的概念。oc中多重继承是用protocol 委托代理来实现的。

10 问: OC中如何进行内存管理?

答:  OC中目前多使用的是ARC(自动引用计数的内存管理模式)。采用这种模式不用手动的保留、释放所创建的内存。当引用计数值为0的时候,相应的内存被释放掉。

11 问:self和super的区别?

答: self有点像c++中的this,super类似于c++中父类进行调用。在实际使用中,self一般指向当前调用方法的类。Super调用方法的时候,一般是为了告诉编译器,这个所调用的方法是父类的方法,而非本类中的方法。

12  问:frame和bounds的区别?

答:  frame可以定义view的原点和大小,但是frame的view是以view父类为参照的。Bounds是指view在本身坐标系中的位置和大小。它的原点一般都是(0,0)点。而frame的原点位置则可以任意的设置。

13  问:OC中有没有私有变量和私有方法?

答:  oc中所有的实例变量都是私有的,其它的类中无法调用。oc中的方法分为静态方法和实例方法,实例方法可以认为都是公有的,其它类中也可以使用。

14  问:简单描述下xcode中所使用的文件类型以及不同的文件类型所支持的开发语言?

答: 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类型的对象。

17   问:简述@protected ,@private,@public,@package的含义?

答: @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。

人们经常将委托与协议来一起使用,其实委托可以单独使用。

•  @interface A:NSObject 

•  -(void)print; 

   @end  

 

•  @interface B:NSObject{ 

•         A *a_delegate; 

• 

@end 

 

•  void main() 

• 

•  B *b=[[B alloc]init]; 

•  A *a=[[A alloc]init]; 

•  b.a_delegate=a; 

•  [b.a_delegate print]; 

委托和协议一起实现:

委托类A

@interface A

{

id<delegate> delegate;

}

@property id<delegate> delegate;

...

@end

 

协议:

@protocol delegate

-(void)func1;

@end

 

受委托类B

@interface B:<delegate>

@end

@implementation B

-(void)func1

{

...

}

 

main()

{

A *a = [[A alloc]init];

B *b = [[B alloc]init];

a.delegate = b;

[a.delegate func1];

[a release];

[b release];

}

27   问:delegate与notification(通知)的区别?

答: delegate和notification都用作消息传递,只是一个是一对一,一个是一对多的。消息的发送者(sender)告知接收者(receiver)某个事件将要发生,delegate同意然后发送者响应事件,delegate机制使得接收者可以改变发送者的行为。通常发送者和接收者的关系是直接的一对多的关系。消息的发送者告知接收者事件已经发生或者将要发送,仅此而已,接收者并不能反过来影响发送者的行为。通常发送者和接收者的关系是间接的多对多关系。

@protocol MyDelegate;

@interface MyClass: NSObject

{

id <MyDelegate> delegate;

}/ 委托方法

@protocol MyDelegate

- (void)didJobs:(NSArray *)args;

@end

28  问:简述IOS各部分应用框架?

答: 

音频和视频:Core Audio ,OpenAL,Media Library ,AVFoundation 

数据管理 :Core Data ,SQLite 
  

图形和动画 :Core Animation,OpenGLES ,Quartz 2D 
 

网络:Bonjour ,WebKit ,BSD Sockets 


用户应用:Address Book ,CoreLocation ,Map Kit ,Store Kit

29  问:简述readwrite,readonly,assign,retain,copy,nonatomic都是什么作用?

答:  readwrite是可读可写特性;需要生成getter方法和setter方法时

readonly 是只读特性  只会生成getter方法不会生成setter方法 ;不希望属性在类外改变

assign 是赋值特性,setter方法将传入参数赋值给实例变量;仅设置变量时;

retain 表示持有特性,setter方法将传入参数先保留,再赋值,传入参数的retaincount会+1;

copy 表示赋值特性,setter方法将传入对象复制一份;需要完全一份新的变量时。

nonatomic 非原子操作,决定编译器生成的setter getter是否是原子操作,atomic表示多线程安全,一般使用nonatomic

30  问:id

答:  id是ios中的一种数据类型,可以表示任何类型的OC对象。

31  问:简述OC中的数据类型?与C语言的类型有何异同?

答:  NSString,NSNumber,NSArray,NSMutableArray,NSData这些都是类,创建之后便会生成对象。Oc中的对象还有一些特有的方法,可以实现很多特有的功能。C语言的基本数据类型int,只是一定字节的内存空间,用于存放数值。

32  问:简述IOS中线程的操作?

答:  线程创建有三种方法:使用NSThread创建、使用GCD的dispatch、使用子类化的NSOperation,然后将其加入NSOperationQueue;在主线程执行代码,方法是performSelectorOnMainThread,如果想延时执行代码可以用performSelector:onThread:withObject:waitUntilDone:Thread 是这三种范式里面相对轻量级的,但也是使用起来最复杂的,你需要自己管理thread的生命周期,线程之间的同步。

33  问:如何对iOS设备进行性能测试?

答: Profile-> Instruments ->Time Profiler

34  问:viewDidLoad、viewDidUnload、viewWillAppear、viewDidAppear、viewWillDisappear、viewDidDisappear

答: viewDidLoad在视图加载后被调用。viewDidUnload当系统内存吃紧的时候会调用该方法。在iPhone OS 3.0之前didReceiveMemoryWarning是释放无用内存的唯一方式,但是OS 3.0及以后viewDidUnload方法是更好的方式。viewWillAppear视图即将可见时调用,viewDidAppear视图已完全过渡到屏幕上时调用。viewWillDisappear视图被驳回时调用,viewDidDisappear视图被驳回后调用。loadView这是当没有正在使用nib视图页面,子类将会创建自己的自定义视图层。绝不能直接调用。如果手工维护views,必须重载重写该方法。

35  问:OC中的内存管理机制?

答:  oc中每一个对象都有一个名为"retainCount"的变量,当 retainCount为0时,运行时环境会通过调用[obj dealloc]来释放对象占用的内存。

class *obj = [class alloc];//alloc会导致retainCount为1  

[obj retain];//retainCount++ 通常在对象赋值之后这样做,代表它多了一个引用。

[obj release];//retainCount-- 通常在使用完该对象的时候这样做。

Test *t1 = [[Test alloc] initWithNum:12];//创建了一个对象,t1是该对象的引用,由于调用了alloc此时retainCount为1  

Test *t2 = t1;//此时t2也要使用该对象

[t2 retain];//t2要使用对象 就必须要retain,此时retainCount为2  

[t1 release];//t1这时不用该对象了 就release了,也就是放弃了对象的使用权,此时retainCount为1 

[t2 release];//t2使用完了 就release 此时retainCount为0,立刻会调用dealloc来释放内存  

规则:谁使用谁就先retain,用完在release就可以了。这样就不会内存泄露了。

 

36  问:oc中autorelease pool的作用?

答:  在oc中autorelease pool在释放的时候会给所有的对象发送release,并且只发送一次。如果发送之后对象的retainCount减为0了,那么恭喜你这个对象可以释放掉了。但有时候你定义了一个对象,此时的retain为0,即使你autorelease pool了,仍然会造成内存泄漏。

37  问:auto release的作用?

答: auto release实际上是对release延迟调用。它会把对象放入到autorelease pool,当pool释放掉的时候,对象才被释放。autorelease pool可以当作是一个对象的内存管理可变数组。

38  问:填写下列程序的执行结果?

•  答:  NSMutableArray* ary = [[NSMutableArray array] retain];  

•  NSString *str = [NSString stringWithFormat:@"test"];  

•  [str retain];  

•  [aryaddObject:str];  

•  NSLog(@"%@%d",str,[str retainCount]);  

•  [str retain];  

•  [str release];  

•  [str release];  

•  NSLog(@"%@%d",str,[str retainCount]);  

•       [aryremoveAllObjects];  

NSLog(@"%@%d",str,[str retainCount]); 

 

str的retainCount创建+1,retain+1,加入数组自动+1

3

retain+1,release-1,release-1

2

数组删除所有对象,所有数组内的对象自动-1

1

 

39  问:写一个setter方法用于完成@property (nonatomic,retain)NSString *name,写一个setter方法用于完成@property(nonatomic,copy)NSString*name

•  - (void) setName:(NSString*) str  

•  {  

•      [str retain];  

•      [name release];  

•      name = str;  

•  }  

•  - (void)setName:(NSString *)str  

•  {  

•      id t = [str copy];  

•      [name release];  

•      name = t;  

}  

40  问:简述oc中得ARC模式?

答:  在ios5以后引入了ARC模式,自动引用计数模式。简单理解:自动加入了retain/release。不需要再去手动得释放对象内存。

41  问:OC中有没有垃圾回收机制?ARC与垃圾回收机制是否相同?

答:  与java .net 类似,在oc2.0之后也有垃圾回收机制,但是xcode中并不支持。注意ARC模式与垃圾回收机制是不同的。ARC也是需要管理内存的,只是隐式的管理内存。

42  问:NSArray与NSMutableArray的异同?

答:  NSArray在定义之后不能改变数组的大小,也不能增加和删除数组中元素的个数。NSMutableArray则是动态的。可以任意的删减。

43  问:ios中的block模块?

答:  在ios中,将blocks当成对象来处理,它封装了一段代码,这段代码可以在任何时候执行。你可以使用^操作符来声明一个Block变量。

44  问:写出下列代码的输出结果?

答:  main()

 { 

   inta[5]={1,2,3,4,5}; 

   int *ptr=(int*)(&a+1);  

  printf("%d,%d",*(a+1),*(ptr-1));

}

2 5

45  问:写一个标准的宏MIN,这个宏输入两个参数并返回较小的一个

答: #define MIN(A,B) ((A) <= (B) ? (A) : (B))

46  问:指出下列const的作用?

答: const int a;   a为一个常整型数

int const a;   同上,a为一个常整型数

const int *a; a为指向常整型数的指针(即整型数不可修改,但是指针可以)

int* const a; a为指向整型数的常指针(即整型数可以修改,但是指针不可修改)

int const *a const; a为一个指向常整数的常指针

47  问:extern "C"的用法?

答:  extern 是 C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器, 
其声明的函数和变量可以在本模块或其它模块中使用。被 extern "C"修饰的变量和函数是按照 C 语言方式编译和连接的。

48  问:volatile的作用?

答:  volatile告诉编译器,这种类型的变量有可能会在运行的过程中发生变化,因此当编译器再次遇到这个变量的时候就会小心翼翼的实时更新这个变量,而不是从寄存器中直接读取它的拷贝。

49  问:重载和重写的区别?

答:  重载:针对方法来说的,方法名相同,参数个数或者参数类型不同,就可重载。重写:是指类与类之前的继承关系,子继承父,写与父类相同的方法就是重写。

50  问:在一个对象的方法里面: self.name =“object”; 和 name =”object”; 有什么不同吗?

答: self.name= "object"会调用对象的setName()方法,name= "object"会直接把object赋值给当前对象的name 属性。

51  问:cocoa中有虚基类的概念吗?怎么简洁的实现?

答:  Obj-c语言里面没有指明有虚基类, 不过实现虚基类更简单, 只要建立一个类, 子类从它派生. 运行时环境会自动确定子类型. 你也可以主动通过[obj isKindOfClass:];方法鉴定对象类型.
如果不希望基类生成的对象方法被调用, 只要
- (NSString *)myMethod。

52  问:void Func ( char str[100] )

{

sizeof( str ) = ?

}

void *p = malloc( 100 );

sizeof ( p ) = ?

Func ( char str[100] )函数中数组名作为函数形参时,在函数体内,数组名失去了本身的内涵,仅仅只是一个指针;在失去其内涵的同时,它还失去了其常量特性,可以作自增、自减等操作,可以被修改。Windows NT 32位平台下,指针的长度(占用内存的大小)为4字节,故sizeof( str ) 、sizeof ( p ) 都为4。

53  问:sprintf,strcpy,memcpy异同?

答:  strcpy是一个字符串拷贝的函数,函数原型为strcpy(char *dst, char *src);结束的标志符号为'\0',由于拷贝的长度不是由我们自己控制的。Memcpy是一个内存拷贝函数,函数的长度可控。sprintf是格式化函数。将一段数据通过特定的格式,格式化到一个字符串缓冲区中去。长度不可控,有可能格式转化后内存溢出。

54   问:@class的作用?以及与#import的区别?

答:  一般在头文件中声明某个类的实例变量的时候用到。两者的区别详见XX。

55   问:列举几种进程同步的方法?

答:  原子操作、信号量机制等

56   问:死锁的条件?

答:互斥 请求保持等

57   问:动态类型、动态绑定?

•  答:

•  id temObj; 

•  A *a=[[A alloc] init];//实例化类A对象  

•      B *b=[[B alloc] init];//实例化类B对象  

•        

•      temObj=a;             //将a对象赋值给temObj  

•      [temObj print];       //调用类A的print方法  

•        

•      temObj=b;             //将b对象赋值给temObj  

    [temObj print];       //调用类B的print方法  

可见这里定义的temObj类型不是固定的,可以动态的绑定为a、b两个对象。

58 #ifdef __cplusplus

extern "C" {

#endif

。。。。。。

#ifdef __cplusplus

}

#endif

 

__cplusplus 是cpp中的自定义宏,表明下面这段代码是c++代码。在添加了extern "C"之后,对程序进行编译的时候表明不使用c++的名字进行修饰,而采用c语言的名字进行修饰。

59 问:ios中动态库与静态库的区别。

答:在IOS中静态库一般用libxxx.a来表示,静态库在编译完成之后,将库中的所有文件都添加到了libxxx.a。因此它的体积较大,但是独立性较好。工程在这个静态库的支持下可以独立的运行。但是如果我们对库文件中的某个函数进行修改,那么整个工程都需要重新进行编译。在IOS中动态库一般使用libxxx.dylib。动态库在编译的时候并没有将所有的代码都添加到工程中,而只是在需要的时候,动态的申请库中相应的函数。因此相对来说动态库的体积较小,而且工程的执行必须是在有动态库支持的环境下才能运行,但同时它的独立性也很好,可以很方便的进行程序的升级。不会影响到对整个工程的运行。

60.Difference between shallowcopy and deep copy?
浅复制和深复制的区

答案:浅复制:只复制指向象的指,而不复制引用象本身。
深复制:复制引用象本身。
意思就是我有个A象,复制一份后得到A_copy象后,于浅复制来,A和A_copy指向的是同一个内存源,复制的只不是是一个指象本身源
是只有一份,那如果我们对A_copy行了修改操作,那么发现A引用的象同被修改,实违背了我复制拷的一个思想。深复制就好理解了,内存中存在了
两份独立象本身。
用网上一哥通俗的将就是:
浅复制好比你和你的影子,你完蛋,你的影子也完蛋
深复制好比你和你的克隆人,你完蛋,你的克隆人活着。

61.What is advantage ofcategories? What is difference between implementing a category and inheritance?类别的作用?承和类别实现中有何区
答案:category可以在不悉,不改原来代的情况下往里面添加新的方法,只能添加,不能除修改。
并且如果类别和原来中的方法生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的。
类别主要有3个作用:
(1)将实现分散到多个不同文件或多个不同框架中。
(2)私有方法的前向引用。
(3)象添加非正式协议。
承可以增加,修改或者除方法,并且可以增加属性。

62.Differencebetween categories and extensions?类别类扩展的区
答案:category和extensions的不同在于 后者可以添加属性。另外后者添加的方法是必实现的。
extensions可以认为是一个私有的Category

 

63 Difference betweenprotocol in objective c and interfaces in java?
obc中的协议和java中的接口概念有何不同?


 

64.What are KVO and KVC?
答案:kvc: -值编码是一种访问对象的属性使用字符串来标识属性,而不是通过调用存取方法,直接或通过实访问的机制。


65.What is purpose ofdelegates?
代理的作用?
答案:代理的目的是改传递控制。允一个在某些特定刻通知到其他,而不需要取到那些的指。可以减少框架复度。
另外一点,代理可以理解java中的回调监听机制的一种似。

66.What aremutable and immutable types in Objective C?
obc中可修改和不可以修改型。

答案:可修改不可修改的集合

67.When we call objective c isruntime language what does it mean?
我们说的obc动态运行时语言是什么意思?

答案:多。 主要是将数据型的确定由编译时,推到了运行。
问题浅涉及到两个概念,运行和多。
简单,运行机制使我直到运行才去决定一个象的类别,以及该类别对象指定方法。

68.what is difference betweenNSNotification and protocol?
通知和协议的不同之?

答案:协议有控制(has-a)的关系,通知没有。
首先我一开始也不太明白,什么叫控制专业术语了~)。但是简单分析下通知和代理的行模式,我大致可以有自己的理解
简单,通知的,它可以一多,一条消息可以多个消息接受者。
代理按我的理解,到不是直接不能一多.

69 What is pushnotification?
什么是推送消息?


70 Polymorphism?
关于多性


car的例子

71.What is responder chain?说说应链
答案: 事件响应链。包括点事件,画面刷新事件等。在视图栈内从上至下,或者从下之上播。
可以点事件的分传递以及理。具体可以去看下touch事件这块。因为问的太抽象化了
怀目出到越后面就越笼统

72.Singleton?例的理解

答案:11,12目其出的有点泛泛的感了,可能言需要或是必的基。
基本能用熟悉的言写出一个例,以及可以运用到的景或是你程中碰到运用的此种模式的框架等。
一步点,考下如何在多线访问单的安全性。

73.Difference between frame andbounds?
frame和bounds有什么不同?

答案:frame指的是:view在父view中的位置和大小。(参照点是父的坐)
bounds指的是:view在本身坐中 的位置和大小。(参照点是本身坐

74.Differencebetween method and selector?
方法和选择器有何不同?

答案:selector是一个方法的名字,method是一个合体,包含了名字和实现.情可以看apple文档。

75 Is there any garbagecollection mechanism in Objective C.?
OBC的垃圾回收机制?

答案: OBC2.0有Garbage collection,但是iOS平台不提供。

76.NSOperation queue?
答案:存放NSOperation的集合。
操作和操作列,基本可以看成java中的线程和线程池的概念。用于理ios线程开问题。


77 What is lazy loading?
答案:懒汉模式,只在用到的候才去初始化。
也可以理解成延。
我得最好也最简单的一个列子就是tableView片的加载显示了。
一个延时载,避免内存高,一个异步加,避免线程堵塞。

78.Can we use two tableviewcontrollers on one viewcontroller?
是否在一个视图控制器中嵌入两个tableview控制器?

答案:一个视图控制只提供了一个View视图,理上一个tableViewController也不能放吧,
只能可以嵌入一个tableview视图

79.Object-c可以多重承么?可以实现多个接口么?重写一个的方式用承好是分好?什么?
Objective-c只支持单继承,如果要实现承的,可以通过类别协议的方式来实现

80.#import 跟#include又什么区 #import<>跟#import""又什么区
答案:@class一般用于文件中需要声明该类的某个量的候用到,在m文 件中是需要使用#import而#import比起#include的好就是不会引起交叉编译

81.ios平台怎么做数据的持久化?coredata和sqlite有无必然系?coredata是一个关系型数据库吗
iOS中可以有四种持久化数据的方式:属性列表、档、SQLite3和Core Data;

82.unix程怎么通信?

   UNIX主要支持三种通信方式:

   1.基本通信:主要用来协调进的同步和互斥

   (1)文件通信

     通信的双方通过查找特定目下特定型的文件(文件)来完成 对临访问时的互斥;例如程p1访问一个源,首先看是否有一个特定型文件,若有,等待一段时间文件。

   (2)记录锁文件

   2.管道通信:适大批量的数据传递

   3. IPC    :适大批量的数据传递

83 .以下WindowsNT下的32位C++程序,请计算sizeof

voidFunc ( char str[100] )  
{    sizeof(str ) =?  
}  
void *p = malloc( 100 ); 
sizeof ( p ) = ?

在函数体内,数名失去了本身的内涵,仅仅只是一个指;Windows NT 32位平台下,指度(占用内存的大小)4,故sizeof( str ) 、sizeof( p ) 都4

84.几种程的同步机制,并比缺点。

答案:  原子操作信号量机制    自旋    管程,会合,分布式系 


程之通信的途径

答案:共享存消息传递管道:以文件系统为 

程死的原因

答案:争及程推进顺序非法 

4个必要条

答案:互斥、求保持、不可剥 

答案:鸵鸟策略、防策略、避免策略、检测与解除死

85.  属性,什么情况使用copyassign,和retain

assign用于简单数据型,如NSInteger,double,bool,retaincopy户对象,copy用于当 a指向一个象,b也想指向同象的候,如果用assigna如果放,再bcrash,如果用copy的方式,ab各自有自己的内存,就可以解决问题retain会使数器加一,也可以解决assign问题。另外:atomicnonatomic用来决定编译器生成的gettersetter是否原子操作。在多线境下,原子操作是必要的,否有可能引起错误果。加了atomicsetter函数会成下面这样

86. UIView CALayer有什么区?

两者最大的区是,图层不会直接渲染到屏幕上。

百度面试:

1面

•    ObjectiveC runtime library:ObjectiveC的对象模型,block的底层实现结构,消息发送,消息转发,这些都需要背后C一层的描述,内存管理。

•    CoreData:中多线程中处理大量数据同步时的操作。

•    Multithreading:什么时候处理多线程,几种方式,优缺点。

•    Delegate, Notification,KVO,other 优缺点

runtime有一点追问,category,method 的实现机制,class的载入过程。 1面整体感觉不错,40分钟不到,感觉回答的还可以。被通知一会儿二面。

2面

二面的时间非常长,差不多将近3个小时,直接面到快下班了。1面问的主要是知识点。2面问主要考察的是设计解决方案的能力,另外辅助追问的方式,考 察深度和广度,回答过程中需要列出适合的具体例子,方案还需要细致到具体的关键的函数名称,方法。另外考察设计模式的理解,最后还考了算法。因为时间太长,这里记录一些重要的问题。

▪    设计一个progress bar解决方案,追问到Core Graphic、CGPath、maskLayer。

▪    设计一个popup view被追问到keyWindow、UIWindow的layer、UIView hierarchy。

▪    从设计模式的角度分析Delegate、Notification、KVO的区别。被追问到自己写的library和开源的项目中用到哪些设计模式,为什么使用,有哪些好处和坏处,现在能否改进。

▪    算是问题3的追问,设计一个方案来检测KVO的同步异步问题。willChange和 didChange的不同点,然后被追问到有没有其他地方也有类似情况,被追问到CoreData 中falutobject。

▪    这个是问题4的追问,设计一个KVO系统。

▪    Multithreading,什么时候采用Multithreading方案,以及理由。追问到系统还有哪些在后台运行的thread,被追问到viewlife cycle、iOS6之后的不同以及内存管理。

▪    Multithreading中常常遇到的问题,追问到死锁,优先级翻转,线程池等。

▪    百度有一个亿级别的APP需要统计用户行为的日志系统。不使用数据库,只是使用普通文件,设计一个系统。被追问到内存映射文件。这个问题本来是服务器的问题,我表示从来没做过,回答很瞎。

算法考了2个。一个是如何求2个集合的交集。另一个是百亿数据中查找相同的数字以及出现的次数。

最后还补充了几个小问题

•    自己对可穿戴设备的感受

•    自己如果进入这个team,自己准备做那方面的事情

•    为什么创业,自己未来规划

一会被告知3面,但是因为太晚,约到次日下午3面。

3面

3面的时间和1面差不多40分钟,问了几个问题,主要是考察精神层面的东西。

•    为什么做Windows Mobile

•    为什么改iOS

•    为什么来百度

•    为什么iPhone 可以成功,那些吸引你

如何看待AppStore现在的生态圈

 

1.      Object-C有多继承吗?没有的话用什么代替?


1>  OC是单继承,没有多继承

2>  有时可以用分类和协议来代替多继承

 

2.      Object-C有私有方法吗?私有变量呢?


1>  OC没有类似@private的修饰词来修饰方法,只要写在.h文件中,就是公共方法

2>  可以使用类扩展(Extension)来增加私有方法和私有变量

 

3.      关键字const什么含义?

const int a;

int const a;

const int *a;

int const *a;

int * const a;

int const * const a;

1>前两个的作用是一样:a 是一个常整型数

2>第三、四个意味着 a 是一个指向常整型数的指针(整型数是不可修改的,但指针可以)

3>第五个的意思:a 是一个指向整型数的常指针(指针指向的整型数是可以修改的,但指针是不可修改的)

4>最后一个意味着:a 是一个指向常整型数的常指针(指针指向的整型数是不可修改的,同时指针也是不可修改的)

 

4.      static的作用?

1>  static修饰的函数是一个内部函数,只能在本文件中调用,其他文件不能调用

2>  static修饰的全部变量是一个内部变量,只能在本文件中使用,其他文件不能使用

3>  static修饰的局部变量只会初始化一次,并且在程序退出时才会回收内存

 

5.      线程和进程的区别?

1>   一个应用程序对应一个进程,一个进程帮助程序占据一块存储空间

2>   要想在进程中执行任务,就必须开启线程,一条线程就代表一个任务

3>   一个进程中允许开启多条线程,也就是同时执行多个任务

6.      堆和栈的区别?


1>   堆空间的内存是动态分配的,一般存放对象,并且需要手动释放内存

2>   栈空间的内存由系统自动分配,一般存放局部变量等,不需要手动管理内存

 

7.      为什么很多内置的类,如TableView的delegate的属性是assign不是retain?


1>  tableView的代理一般都是它所属的控制器,控制器会对它内部的view做一次retain操作

2>  假设tableView也对代理(控制器)做一次retain操作,那么就出现循环retain问题

 

8.      定义属性时,什么情况使用copy、assign、retain?


1>  copy:NSString、Block等类型

2>  assign:非OC对象类型,基本数据类型(两个对象相互引用的时候,一端用retain,一端用assign)

3>  retain:OC对象类型

 

9.      对象是什么时候被释放的?


每个对象都有一个引用计数器,每个新对象的计数器是1,当对象的计数器减为0时,就会被销毁

 

10.   tableView的重用机制?


这里只是简述:将离开屏幕的cell放到缓存池,重新拿来显示到屏幕的其他位置(其他自己详细描述)

 

11.   ViewController 的loadView、viewDidLoad、viewDidUnload分别是什么时候调用的,在自定义ViewCointroller时在这几个函数中应该做什么工作?

1>  loadView

Ø  当第一次使用控制器的view时,会调用loadView方法创建view

Ø  一般在这里自定义view

 

2>  viewDidLoad

Ø  当控制器的view创建完毕时会调用,也就是在loadView后调用

Ø  一般在这里添加子控件、初始化数据

 

3>  viewDidUnload

Ø  当控制器的view因为内存警告被销毁时调用

Ø  一般在这里回收跟界面相关的资源(界面都会销毁了,跟界面相关的资源肯定不要了)

 

12.   ViewController的didReceiveMemoryWarning是在什么时候调用的?默认的操作是什么?


Ø  当应用程序接收到系统的内容警告时,就有可能调用控制器的didRece…Warning方法

Ø  它的默认做法是:

l   当控制器的view不在窗口上显示时,就会直接销毁,并且调用viewDidUnload方法

 

13.   怎么理解MVC,在Cocoa中MVC是怎么实现的?


1>  M:Model,模型,封装数据

2>  V:View,视图界面,负责展示数据

3>  C:Controller,控制器,负责提供数据(Model)给界面(View)

 

14.   self.跟self->什么区别?


1>  self.是调用get方法或者set放 (因此使用@property self.xx的时候一定要使用@sy开通关键词)

2>  self是当前本身,是一个指向当前对象的指针

3>  self->是直接访问成员变量

 

15.   id、nil代表什么?

1>  id类型的指针可以指向任何OC对象

2>  nil代表空值(空指针的值, 0)

 

16.     如何对iOS设备进行性能测试?

Timer Profile

#import 跟#include、@class有什么区别?#import<>跟 #import”"又什么区别?

1>  #import和#include都能完整地包含某个文件的内容,#import能防止同一个文件被包含多次

2>  @class仅仅是声明一个类名,并不会包含类的完整声明;@class还能解决循环包含的问题

3>  #import <>用来包含系统自带的文件,#import“”用来包含自定义的文件

 

属性readwrite,readonly,assign,retain,copy,nonatomic各是什么作用,在那种情况下用?

1>  readwrite:同时生成get方法和set方法的声明和实现

2>  readonly:只生成get方法的声明和实现

3>  assign:set方法的实现是直接赋值,用于基本数据类型

4>  retain:set方法的实现是release旧值,retain新值,用于OC对象类型

5>  copy:set方法的实现是release旧值,copy新值,用于NSString、block等类型

6>  nonatomic:非原子性,set方法的实现不加锁(比atomic性能高)

 

写一个setter方法用于完成@property (nonatomic,retain)NSString *name,写一个setter方法用于完成@property(nonatomic,copy)NSString *name.

1>   @property (nonatomic, retain) NSString *name;

- (void)setName:(NSString *)name

{

       if(_name != name) {

              [_namerelease];

              _name= [name retain];

}

}

2>   @property(nonatomic, copy) NSString *name;

- (void)setName:(NSString *)name

{

       if(_name != name) {

              [_namerelease];

              _name= [name copy];

}

}

对于语句NSString*obj = [[NSDataalloc] init]; ,编译时和运行时obj分别是什么类型?

1>    编译时是NSString类型

2>    运行时是NSData类型

 

常见的object-c的数据类型有那些,和C的基本数据类型有什么区别?

1>   常用OC类型:NSString、NSArray、NSDictionary、NSData、NSNumber等

2>   OC对象需要手动管理内存,C的基本数据类型不需要管理内存

 

id 声明的变量有什么特性?

id声明的变量能指向任何OC对象

 

Objective-C如何对内存管理的,说说你的看法和解决方法?

1>   每个对象都有一个引用计数器,每个新对象的计数器是1,当对象的计数器减为0时,就会被销毁

2>   通过retain可以让对象的计数器+1、release可以让对象的计数器-1

3>   还可以通过autorelease pool管理内存

4>   如果用ARC,编译器会自动生成管理内存的代码

 

内存管理的几条原则时什么?按照默认法则.哪些方法生成的对象需要手动释放?在和property结合的时候怎样有效的避免内存泄露?

1>    只要调用了alloc、copy、new方法产生了一个新对象,都必须在最后调用一次release或者autorelease

2>    只要调用了retain,都必须在最后调用一次release或者autorelease

3>    @property如果用了copy或者retian,就需要对不再使用的属性做一次release操作

4>    如果用了ARC,另外讨论

 

看下面的程序,三次NSLog会输出什么?为什么?

NSMutableArray* ary = [[NSMutableArray array] retain];  

NSString *str = [NSString stringWithFormat:@"test"]; // 1 

[strretain];  // 2

[aryaddObject:str]; // 3  

NSLog(@"%d",[str retainCount]);  

[strretain];  //4

[strrelease];  // 3

[strrelease];  // 2

NSLog(@"%d",[str retainCount]);  

[aryremoveAllObjects]; //1  

NSLog(@"%d",[str retainCount]);  

结果:3、2、1

 

 

OC中创建线程的方法是什么?如果指定在主线程中执行代码?如何延时执行代码?

1>   创建线程的方法

Ø  NSThread

Ø  NSOperationQueue和NSOperation

Ø  GCD

2>   主线程中执行代码

Ø  [selfperformSelectorOnMainThread: withObject: waitUntilDone:];

Ø  [selfperformSelector: onThread:[NSThreadmainThread] withObject:waitUntilDone:];

Ø  dispatch_async(dispatch_get_main_queue(), ^{

});

3>   延时执行

Ø  doubledelayInSeconds = 2.0;

dispatch_time_tpopTime =dispatch_time(DISPATCH_TIME_NOW,

(int64_t)(delayInSeconds * NSEC_PER_SEC));

dispatch_after(popTime,dispatch_get_main_queue(), ^(void){       

});

Ø  [selfperformSelector: withObject: afterDelay:];

Ø  [NSTimerscheduledTimerWithTimeInterval: target: selector: userInfo:repeats:];

警告:一定要把英文题目过一遍,有些公司的题目故意弄成英文的!!!

Difference between shallow copy and deep copy?

1>   浅拷贝:指针(地址)拷贝,不会产生新对象

2>   深拷贝:内容拷贝,会产生新对象

 

What is advantage of categories? What is differencebetween implementing a category and inheritance?

1>   分类可以在不修改原来类模型的基础上拓充方法

2>   分类只能扩充方法、不能扩充成员变量;继承可以扩充方法和成员变量

3>   继承会产生新的类

 

Difference between categories and extensions?


1>   分类是有名称的,类扩展没有名称

2>   分类只能扩充方法、不能扩充成员变量;类扩展可以扩充方法和成员变量

3>   类扩展一般就写在.m文件中,用来扩充私有的方法和成员变量(属性)

 

Difference between protocol in objective c and interfacesin java?


1>  Java的接口中声明的方法必须都实现

2>  Oc的protocol中声明的方法并不一定要实现

 

What are KVO and KVC?

1>  KVC是键值编码,可以通过一个字符串的key(属性名)修改对象的属性值

2>  KVO是键值监听,可以监听一个对象属性值的改变

 

What is purpose of delegates?


1>   两个对象之间传递数据和消息

2>   解耦,拆分业务逻辑

 

What are mutable and immutable types in Objective C?


1>  mutable是可变类型,比如NSMutableArray,可以动态往里面添加元素

2>  immutable是不可变类型,比如NSArray,固定的存储空间,不能添加元素

 

When we call objective c is runtime language what does itmean?


1>   动态绑定:对象类型在运行时才真正确定

2>   多态性

3>   消息机制

 

what is difference between NSNotification and protocol?


1>   通过NSNotification可以给多个对象传递数据和消息

2>   通过protocol(代理模式)只能给一个对象传递数据和消息

 

What is push notification?

1>   本地推送:程序内部弹出通知到用户设备

2>   远程推送:由推送服务器推送通知到用户设备

 

What is Polymorphism?


多态:父类指针指向子类对象

 

What is Singleton?


单粒:保证程序运行过程中,永远只有一个对象实例

目的是:全局共享一份资源、节省不必要的内存开销

 

What is responder chain?


响应者链:

l  UIResponder有一个nextResponder属性,通过该属性可以组成一个响应者链,事件或消息在其路径上进行传递

l  如果UIResponder没有处理传给它的事件,会将未处理的消息转发给自己的nextResponder

Difference between frame and bounds?


1>  frame以父控件的左上角为坐标原点

2>  bounds以控件本身的左上角为坐标原点

 

Difference between method and selector?


通过一个selector可以找到方法地址,进而调用一个方法

 

Is there any garbage collection mechanism in ObjectiveC.?


1>  OC 1.0没有垃圾回收

2>  OC 2.0有垃圾回收,只能用在Mac上

3>  iOS中有ARC机制,是编译器特性,垃圾回收是运行时特性

 

What is NSOperation queue?


1>   用来存放NSOperation对象的队列,可以用来异步执行一些操作

2>   一般可以用在网络请求等耗时操作

 

What is lazy loading?


延迟加载:比如控制器的view,在第一次用到view时才会调用loadView方法进行创建

Can we use two tableview controllers on one viewcontroller?

从技术角度上分析,一个控制器内部添加2个表格控制器是没有问题的

 

Can we use one tableview with two different datasources?How you will achieve this?



从对象属性上分析,tableView只有一个dataSource属性。当然,真要使用2个不同的数据源,还是有其他办法解决的

1.       When to use NSMutableArray and when to use NSArray? 

1>   当数组元素需要动态地添加或者删除时,用NSMutableArray

2>   当数组元素固定不变时,用NSArray

 

2.     Give usexample of what are delegate methods andwhat are data source methods of uitableview.

1>   代理方法:返回tableView每行的高度、监听tableView每行的选中

2>   数据源方法:返回tableView数据的组数和行数、每行显示什么数据

 

3.     How manyautoreleasepool you can create in your application? Is there any limit?

没有限制

 

4.     If we don’tcreate any autorelease pool in our application then is there any autoreleasepool already provided to us?

系统会默认会不定时地创建和销毁自动释放池

 

5.     When you willcreate an autorelease pool in your application?

当不需要精确地控制对象的释放时间时,可以手动创建自动释放池

 

6.      When retaincount increase?

当做一次retain或者copy操作,都有可能增加计数器

 

7.      What arecommonly used NSObject class methods?

NSObject常见的类方法有:alloc、new、description等

8.     What isconvenience constructor?

NSStirngstringWithFormatNSNumbernumberWithInt

 

9.     How to designuniversal application in Xcode?

1>   创建项目时,Device选择Universal

2>   可以创建一套痛用的数据模型

3>   根据iPhone\iPad选择不同的控制器(iPad可能用UISplitViewController

4>   根据iPhone\iPad选择不同的界面

 

10.   What is keywordatomic in Objective C?

1>  atomic是原子性

2>  atomic会对set方法的实现进行加锁

 

11.   What are UIViewanimations?

UIView封装的核心动画可以通过类方法\block实现

 

12.   How can youstore data in iPhone applications?

1>   属性列表

2>   Preference(NSUserDefaults)

3>   键值归档(NSKeyedArchiver、NSCoding)

4>   SQLite数据库

5>   Core Data

 

1、IOS 反射机制
同其它高级语言类似,oc 也提供了动态支持-即 java 所谓的反射机。ios 种存在着多种反射机制。下面分别介绍常用的几种反射机制的使用
(1) 类的动态加载
Class clz=NSClassFromString(@"MyClass");
id obj=[[clz alloc]init]
这里返回的是一个类的对象。
或者
id obj=[[NSClassFromString(@”MyClass”) alloc]init];利用这种方法我们就可以方便的通过字符串构建实例。这使得我们可以在运行的时候加载类而不是在编译的时候加载类。
同时,不需要#import
MyClass
例如:自定义UITabBarController的TabBar视图.有时候我们利用自己自定义的tabbar视图可能大小不是白色区域部分的大小(49)。因此我们需要将紫色的部分放大一点。

所以我们首先需要找到这个紫色部分的对象。
for (UIView *subview in self.view.subviews) {

// NSClassFromString() -> 反射机制,通过指定类名
Class class = NSClassFromString(@"UITransitionView");
// 是否属于自该类
if ([subview isMemberOfClass:class]) {
// 将TransitionView对象高度增加9,
// 自定义tabBar时视图时,高度就可以设置为40了 iphone5的屏幕subview.frame = CGRectMake(0, 0, 320, 519+9);
}
}

(2)方法的动态调用
如果这个方法存在我们就调用这个方法。
SEL sel = NSSelectorFromString(@"doSomethingMethod:")if([object respondsToSelector:sel]) {
[object performSelector:sel withObject:color]; }
传递2个以内的参数可以用withobject,但是多个参数一般要用到NSInvocation除了向对象发送 performSelector 消息之外,Objective-C 还提供了 objc_msgSend 函数, 你可以用它向任何对象发送一条消息:

//正常
CLASSA *a = [[CLASSA alloc] init];[a CallFunc];

//反射

page1image9000page1image9168

Class cls = NSClassFromString(@"CLASSA");
id a= [[cls alloc] init];
SEL selector = NSSelectorFromString(@"CallFunc");

[a performSelector:selector withObject:nil];

(3)类的动态创建
要在代,而不是通.h.m文件定义类,可以使用Object C 运行时库API(需要#include <objc/runtime.h>):
(4)iOS 属性反射:说白了,就是将两个对象的所有属性,用动态的方式取出来,并根据属性名, 绑值在一起。
比较常用在 json 数据的解析上:
json 的顶层数据类型必须是 nsarry 和 nsdictionary 的。
id jsondata = [NSJSONSerializationJSONObjectWithData:dataoptions:NSJSONReadingAllowFragments error:&error];

if([jsondataisKindOfClass:[NSDictionaryclass]])⾸首先要判断⼀一下这个属性是不是字典或者数组的成员。

2retain assign copy strong weak autorelease atomic

nonatomic readonly readwrite

arc:ARC不是垃圾回收,而是编译器自动插入代码来减少程序员的代码输入和失误。同时比垃圾和效率要高,因为其不影响运行时间,相当于自己管理内存。

retain assign:对象的引用计数+1.什么时候使用呢?比如我们申请了一块内存,将其赋值a,a又赋值b,那么当a不用这块内存的时候我们能不能释放这个内存呢?显然还要查看b的情况。Assign就是直接赋值,当数据为int, float等原生类型时基础数据类型(NSInteger,CGFloat)C数据类型(int, float, double, char等),可以使用assignRetain是当内存申请完赋值给b的时候引用计数reference count+1,传递给b的时候再+1.最后看引用计数的内存是不是为0来决定是否释放这个空间中的内容。alloc对象分配后引用计数为1release对象引用计数-1如果为0释放内存autorelease对象引用计数-1如果为0不马上释放,最近一个个pool时释放。Retain是指针复制(浅复制),引用计数加1,而不会导致内容被复制。

copy:是在你不希望ab共享一块内存时会使用到。ab各自有自己的内存。复制内容(深复制)
Strong:ARC模式下引入的属性,相当于retain
Weak:取代之前的assign,对象销毁之后会自动置为nil,防止野指针。alloc之后count就是1,release就会调用dealloc销毁这个对象。

如果 retain,需要release两次。
autorelease:
a.先建立一个autorelease pool
b.
对象从这个autorelease pool里面生成。
c.对象生成 之后调用autorelease函数,这个函数的作用仅仅是在autorelease pool中做个标记,让pool记得将来release一下这个对象。

d.程序结束时,pool本身也需要rerlease
对象引用计数
-1 如果为0不马上释放,最近一个pool时释放。
autoreleasepool 只能放也池中的对象起作用,对于每一个Runloop, 系统会隐式创建一个Autorelease pool.在每一个 Runloop结束时,当前栈顶的Autorelease pool会被销毁,这样这个pool里的每个Object会被releasereadwrite:是可读可写特性,需要生成gettersetter方法;
readonly 是之都特性,只会生成getter方法,不会生成setter方法,不希望属性在类外改变时候使用;

atomic:设置成员变量的@property属性时,默认为atomic,提供多线程安全,atomicObjc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的。Nonatomic:禁止多线程,变量保护,提高性能。

3谓词

cocoa 提供NSPredicate类,这个类可以用于描述条件和计算对象是否匹配,或者将满足条件的对象迅速过滤出来,以避免在比较对象时使用的硬编码。
作用
1 判断条件对象:
NSPredicate* predicate2 = [NSPredicate predicateWithFormat:@"num ==20"];

if ([predicate1 evaluateWithObject:modelA]) {NSLog(@"zxc");

}
这句话的作用是,对类 modelA 中的属性进行判断,判断 num 与 20 是否相等,如果相等则执行下面的 NSLog 信息。
作用 2 快速过滤
NSArray* array = @[@"af",@"bg"];

NSArray* array2 = @[@"af",@"fsd",@"bg",@"tre"];

NSPredicate* thePredicate = [NSPredicate predicateWithFormat:@"NOT(SELF in%@)",array];

NSArray* arr3 = [array2 filteredArrayUsingPredicate:thePredicate];这里的作用应该是将数组 array2 中与数组 array 不相同的元素取出,放在数组 arr3 中。再例:
NSPredicate *pre = [NSPredicate predicateWithFormat:@"pid>1"];
NSMutableArray *arrayPre=[array filteredArrayUsingPredicate: pre];
将数组 array中满足条件(:@"pid>1"];)的元素取出,放在数组arrayPre中。

4 RUN LOOP

run loop 表示一个事件处理的循环机制。用于不停的调度工作以及处理事件。Run loops是线程相关的的基础框架的一部分。使用run loop的目的是让你的线程在有工作的时候忙于工作,而没工作的时候处于休眠状态。Runloop还可以在loop在循环中的同时响应其他输入源,比如界面控件的按钮,手势等。Run loop 接收输入事件来自两种不同的来源:

输入源(input source)和定时源(timer source)。一般在线程中创建定时器比较常用,具体可以参见第八章线程部分。每一个线程都有其对应的RunLoop,但是默认非主线程的RunLoop是没有运行的,需要为RunLoop添加至少一个事件源,然后去run它。

5 #include#import nil Nil null区别#include <>对系统文件进行引用,编译器会到系统目录下去查找。

#include“”会到当前工程目录下去查找。
#
import 和#include功能基本相同,但是避免了由#include带来的重复引用的问题。nil:指向 oc 中对象的空指针
Nil:指向oc的空指
NULL:指向其他型的空指,如一个c型的内存指
6 预编译中经常使用
调试的时候使用
#ifdef DEBUG
#endif
模拟器
#ifdef __i386
#endif
根据系统版本号进行某些操作:
#if __IPHONE_OS_VERSION_MIN_REQUIRED > 40300
iphone 版本号大于 4.03处理一些事情
#elif __MAC_OS_X_VERSION_MIN_REQUIRED <10.5
mac
版本号小于 10.5处理一些事情
#endif
只在 mac系统下处理一些事情

#ifdef __MAC_OS_X_VERSION_MIN_REQUIRED 

13.   What isNSManagedObject model?

NSManagedObject是Core Data中的实体对象

 

14.   What is predicate?

谓词:可以以一定条件来过滤数组、字典等集合数据,也能用在Core Data的数据查询中

 



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值