美文网首页
转载:经典题型

转载:经典题型

作者: 笔笔请求 | 来源:发表于2016-03-07 13:20 被阅读18次
    1. Object-c的类可以多重继承么?可以实现多个接口么?Category是什么?重写一个类的方式用继承好还是分类好?
      Object-c的类不可以多重继承;可以实现多个接口,通过实现多个接口可以完成C++的多重继承;Category是类别,一般情况用分类好,用Category去重写类的方法,仅对本Category有效,不会影响到其他类与原有类的关系。
      2.#import 跟#include 又什么区别,@class呢, #import<> 跟 #import”"又什么区别?

    import是Objective-C导入头文件的关键字,#include是C/C++导入头文件的关键字,使用#import头文件会自动只导入一次,不会重复导入,相当于#include和#pragma once;@class告诉编译器某个类的声明,当执行时,才去查看类的实现文件,可以解决头文件的相互包含;#import<>用来包含系统的头文件,#import””用来包含用户头文件。

    1. 属性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
      4.对于语句NSString*obj = [[NSData alloc] init]; obj在编译时和运行时分别时什么类型的对象?
      编译时是NSString的类型;运行时是NSData类型的对象
      5.常见的object-c的数据类型有那些, 和C的基本数据类型有什么区别?如:NSInteger和int
      object-c的数据类型有NSString,NSNumber,NSArray,NSMutableArray,NSData等等,这些都是class,创建后便是对象,而C语言的基本数据类型int,只是一定字节的内存空间,用于存放数值; NSInteger是基本数据类型,并不是NSNumber的子类,当然也不是NSObject的子类。NSInteger是基本数据类型Int或者Long的别名(NSInteger的定义typedef long NSInteger),它的区别在于,NSInteger会根据系统是32位还是64位来决定是本身是int还是Long。
      6.id 声明的对象有什么特性?
      Id 声明的对象具有运行时的特性,即可以指向任意类型的objcetive-c的对象;
      7.Objective-C如何对内存管理的,说说你的看法和解决方法?
      Objective-C的内存管理主要有三种方式ARC(自动内存计数)、手动内存计数、内存池。
      8.内存管理的几条原则时什么?按照默认法则.那些关键字生成的对象
      需要手动释放?在和property结合的时候怎样有效的避免内存泄露?
      谁申请,谁释放
      遵循Cocoa Touch的使用原则;
      内存管理主要要避免“过早释放”和“内存泄漏”,对于“过早释放”需要注意@property设置特性时,一定要用对特性关键字,对于“内存泄漏”,一定要申请了要负责释放,要细心。
      关键字alloc 或new 生成的对象需要手动释放;
      设置正确的property属性,对于retain需要在合适的地方释放,
      9.如何对iOS设备进行性能测试?
      Profile-> Instruments ->Time Profiler
    2. Object C中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码、方法又是什么?
      线程创建有三种方法:使用NSThread创建、使用GCD的dispatch、使用子类化的NSOperation,然后将其加入NSOperationQueue;在主线程执行代码,方法是performSelectorOnMainThread,如果想延时执行代码可以用performSelector:onThread:withObject:waitUntilDone:
      11.描述一下iOS SDK中如何实现MVC的开发模式
      MVC是模型、试图、控制开发模式,对于iOS SDK,所有的View都是视图层的,它应该独立于模型层,由视图控制层来控制。所有的用户数据都是模型层,它应该独立于视图。所有的ViewController都是控制层,由它负责控制视图,访问模型数据。
    3. **static ** 关键字的作用:
      (1)函数体内 static 变量的作用范围为该函数体,不同于 auto 变量,该变量的内存只被分配一次,
      因此其值在下次调用时仍维持上次的值;
      (2)在模块内的 static 全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;
      (3)在模块内的 static 函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明
      它的模块内;
      (4)在类中的 static 成员变量属于整个类所拥有,对类的所有对象只有一份拷贝;
      (5)在类中的 static 成员函数属于整个类所拥有,这个函数不接收 this 指针,因而只能访问类的static 成员变量。
      13.线程与进程的区别和联系 ?
      进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。
      程 ** ** 和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进 ** **程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健 ** ** 壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
      14.堆和栈的区别
      管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员控制,容易产生memory leak。
      申请大小:
      栈: 在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在 WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将提示overflow。因 此,能从栈获得的空间较小。
      堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。
      碎片问题:对于堆来讲,频繁的new/delete势必会造成内存空间的不连续,从而造成大量的碎片,使程序效率降低。对于栈来讲,则不会存在这个问题,因为栈是先进后出的队列,他们是如此的一一对应,以至于永远都不可能有一个内存块从栈中间弹出
      分配方式:堆都是动态分配的,没有静态分配的堆。栈有2种分配方式:静态分配和动态分配。静态分配是编译器完成的,比如局部变量的分配。动态分配由alloca函数进行分配,但是栈的动态分配和堆是不同的,他的动态分配是由编译器进行释放,无需我们手工实现。
      分配效率:栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址,压栈出栈都有专门的指令执行,这就决定了栈的效率比较高。堆则是C/C++函数库提供的,它的机制是很复杂的。
      15.什么是键 -, 键路径是什么
      模型的性质是通过一个简单的键(通常是个字符串)来指定的。视图和控制器通过键来查找相应的属性值。在一个给定的实体中,同一个属性的所有值具有相同的数据类型。键-值编码技术用于进行这样的查找—它是一种间接访问对象属性的机制。
      键路径是一个由用点作分隔符的键组成的字符串,用于指定一个连接在一起的对象性质序列。第一个键的
      性质是由先前的性质决定的,接下来每个键的值也是相对于其前面的性质。键路径使您可以以独立于模型
      实现的方式指定相关对象的性质。通过键路径,您可以指定对象图中的一个任意深度的路径,使其指向相
      关对象的特定属性。
      16.目标 - 动作机制
      目标是动作消息的接收者。一个控件,或者更为常见的是它的单元,以插座变量(参见"插座变量"部分)
      的形式保有其动作消息的目标。
      动作是控件发送给目标的消息,或者从目标的角度看,它是目标为了响应动作而实现的方法。
      程序需要某些机制来进行事件和指令的翻译。这个机制就是目标-动作机制。
    4. objc 的内存管理
      1 如果您通过分配和初始化(比如[[MyClass alloc] init])的方式来创建对象,您就拥
      有这个对象,需要负责该对象的释放。这个规则在使用NSObject的便利方法new 时也同样适用。
      2 如果您拷贝一个对象,您也拥有拷贝得到的对象,需要负责该对象的释放。
      3 如果您保持一个对象,您就部分拥有这个对象,需要在不再使用时释放该对象。
      反过来,
      4 如果您从其它对象那里接收到一个对象,则您不拥有该对象,也不应该释放它(这个规则有少数
      的例外,在参考文档中有显式的说明)。
    5. 自动释放池是什么 , 如何工作
      当 您向一个对象发送一个autorelease消息时,Cocoa就会将该对象的一个引用放入到最新的自动释放池。它仍然是个正当的对象,因此自动释放池定 义的作用域内的其它对象可以向它发送消息。当程序执行到作用域结束的位置时,自动释放池就会被释放,池中的所有对象也就被释放。
    6. ojc-c 是 通过一种"referring counting"(引用计数)的方式来管理内存的, 对象在开始分配内存(alloc)的时候引用计数为一,以后每当碰到有copy,retain的时候引用计数都会加一, 每当碰到release和autorelease的时候引用计数就会减一,如果此对象的计数变为了0, 就会被系统销毁.
    7. NSAutoreleasePool 就是用来做引用计数的管理工作的,这个东西一般不用你管的.
    8. autorelease和release没什么区别,只是引用计数减一的时机不同而已,autorelease会在对象的使用真正结束的时候才做引用计数减一.
      19.类工厂方法是什么
      类工厂方法的实现是为了向客户提供方便,它们将分配和初始化合在一个步骤中,返回被创建的对象,并
      进行自动释放处理。这些方法的形式是+ (type)className...(其中 className不包括任何前缀)。
      工厂方法可能不仅仅为了方便使用。它们不但可以将分配和初始化合在一起,还可以为初始化过程提供对
      象的分配信息。
      类工厂方法的另一个目的是使类(比如NSWorkspace)提供单件实例。虽然init...方法可以确认一
      个类在每次程序运行过程只存在一个实例,但它需要首先分配一个“生的”实例,然后还必须释放该实例。
      工厂方法则可以避免为可能没有用的对象盲目分配内存。
      20.单件实例是什么
      Foundation 和 Application Kit 框架中的一些类只允许创建单件对象,即这些类在当前进程中的唯一实例。举例来说,NSFileManager 和NSWorkspace 类在使用时都是基于进程进行单件对象的实例化。当向这些类请求实例的时候,它们会向您传递单一实例的一个引用,如果该实例还不存在,则首先进行实例的分配 和初始化。单件对象充当控制中心的角色,负责指引或协调类的各种服务。如果类在概念上只有一个实例(比如
      NSWorkspace),就应该产生一个单件实例,而不是多个实例;如果将来某一天可能有多个实例,您可
      以使用单件实例机制,而不是工厂方法或函数。
      21.动态绑定
      —在运行时确定要调用的方法
      动态绑定将调用方法的确定也推迟到运行时。在编译时,方法的调用并不和代码绑定在一起,只有在消实发送出来之后,才确定被调用的代码。通过动态类型和动态绑 定技术,您的代码每次执行都可以得到不同的结果。运行时因子负责确定消息的接收者和被调用的方法。运行时的消息分发机制为动态绑定提供支持。当您向一个动 态类型确定了的对象发送消息时,运行环境系统会通过接收者的isa指针定位对象的类,并以此为起点确定被调用的方法,方法和消息是动态绑定的。而且,您不 必在Objective-C 代码中做任何工作,就可以自动获取动态绑定的好处。您在每次发送消息时,
      特别是当消息的接收者是动态类型已经确定的对象时,动态绑定就会例行而透明地发生。
    9. obj-c 的优缺点
      objc优点:
    1. Cateogies
    2. Posing
    3. 动态识别
    4. 指标计算
      5)弹性讯息传递
    5. 不是一个过度复杂的 C 衍生语言
    6. Objective-C 与 C++ 可混合编程
      缺点:
    7. 不支援命名空间
    8. 不支持运算符重载
      3) 不支持多重继承
      4) 使用动态运行时类型,所有的方法都是函数调用,所以很多编译时优化方法都用不到。(如内联函数等),性能低劣。
    1. sprintf,strcpy,memcpy 使用上有什么要注意的地方
      strcpy是一个字符串拷贝的函数,它的函数原型为strcpy(char *dst, c*****t char *src);
      将 src开始的一段字符串拷贝到dst开始的内存中去,结束的标志符号为'\0',由于拷贝的长度不是由我们自己控制的,所以这个字符串拷贝很容易出错。具 备字符串拷贝功能的函数有memcpy,这是一个内存拷贝函数,它的函数原型为memcpy(char dst, c*****t char src, unsigned int len);
      将长度为len的一段内存,从src拷贝到dst中去,这个函数的长度可控。但是会有内存叠加的问题。
      sprintf是格式化函数。将一段数据通过特定的格式,格式化到一个字符串缓冲区中去。sprintf格式化的函数的长度不可控,有可能格式化后的字符串会超出缓冲区的大小,造成溢出。
      24 .readwritereadonlyassignretaincopynonatomic 属性的作用
      @property是一个属性访问声明,扩号内支持以下几个属性:
      1,getter=getterName,setter=setterName,设置setter与getter的方法名
      2,readwrite,readonly,设置可供访问级别
      2,assign,setter方法直接赋值,不进行任何retain操作,为了解决原类型与环循引用问题
      3,retain,setter方法对参数进行release旧值再retain新值,所有实现都是这个顺序(CC上有相关资料)
      4,copy,setter方法进行Copy操作,与retain处理流程一样,先旧值release,再Copy出新的对象,retainCount为1。这是为了减少对上下文的依赖而引入的机制。
      copy是在你不希望a和b共享一块内存时会使用到。a和b各自有自己的内存。
      5,nonatomic,非原子性访问,不加同步,多线程并发访问会提高性能。注意,如果不加此属性,则默认是两个访问方法都为原子型事务访问。锁被加到所属对象实例级(我是这么理解的...)。
      atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。在多线程环境下,原子操作是必要的,否则有可能引起错 误的结果。加了atomic,setter函数会变成下面这样:
      24.什么时候用delegate,什么时候用Notification?
      delegate针对one-to-one关系,并且reciever可以返回值 给sender,notification 可以针对one-to-one/many/none,reciever无法返回值给sender.所以,delegate用于sender希望接受到 reciever的某个功能反馈值,notification用于通知多个object某个事件。
      25.什么是KVC和KVO?
      KVC(Key-Value-Coding)内部的实现:一个对象在调用setValue的时候,
      (1)首先根据方法名找到运行方法的时候所需要的环 境参数。
      (2)他会从自己isa指针结合环境参数,找到具体的方法实现的接口。
      (3)再直接查找得来的具体的方法实现。KVO(Key-Value- Observing):当观察者为一个对象的属性进行了注册,被观察对象的isa指针被修改的时候,isa指针就会指向一个中间类,而不是真实的类。所以 isa指针其实不需要指向实例对象真实的类。所以我们的程序最好不要依赖于isa指针。在调用类的方法的时候,最好要明确对象实例的类名
      26.ViewController 的 loadView, viewDidLoad, viewDidUnload 分别是在什么时候调用的?
      在自定义ViewController的时候这几个函数里面应该做什么工作?
      viewDidLoad在view 从nib文件初始化时调用,loadView在controller的view为nil时调用。此方法在编程实现view时调用,view 控制器默认会注册memory warning notification,当view controller的任何view 没有用的时候,viewDidUnload会被调用,在这里实现将retain 的view release,如果是retain的IBOutlet view 属性则不要在这里release,IBOutlet会负责release 。
      29."NSMutableString *"这个数据类型则是代表"NSMutableString"对象本身,这两者是有区别的。
      而NSString只是对象的指针而已。
      面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
      面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。;
      30.类别的作用
      类别主要有3个作用:
      ( 1 )将类的实现分散到多个不同文件或多个不同框架中。
      ( 2 )创建对私有方法的前向引用。
      ( 3 )向对象添加非正式协议。
      类别的局限性
      有两方面局限性:
      ( 1 )无法向类中添加新的实例变量,类别没有位置容纳实例变量。
      ( 2 )名称冲突,即当类别中的方法与原始类方法名称冲突时,类别具有更高的优先级。类别方法将完全取代初始方法从而无法再使用初始方法。
      无法添加实例变量的局限可以使用字典对象解决
    2. @synthesize和 @dynamic 区别?
      @synthesize 是系统自动生成getter和setter属性声明
      @dynamic 是开发者自已提供相应的属性声明
      @dynamic 意思是由开发人员提供相应的代码:对于只读属性需要提供 setter,对于读写属性需要提供 setter 和getter。@synthesize 意思是,除非开发人员已经做了,否则由编译器生成相应的代码,以满足属性声明。
      @dynamic的意思是告诉编译器,属性的获取与赋值方法由用户自己实现, 不自动生成。
      32.浅复制和深复制的区别? 浅层复制:只复制指向对象的指针,而不复制引用对象本身。 深层复制:复制引用对象本身。 意思就是说我有个A对象,复制一份后得到A_copy对象后,对于浅复制来说,A和A_copy指向的是同一个内存资源,复制的只不过是是一个指针,对象本身资源 还是只有一份,那如果我们对A_copy执行了修改操作,那么发现A引用的对象同样被修改,这其实违背了我们复制拷贝的一个思想。深复制就好理解了,内存中存在了 两份独立对象本身。 用网上一哥们通俗的话将就是: 浅复制好比你和你的影子,你完蛋,你的影子也完蛋 深复制好比你和你的克隆人,你完蛋,你的克隆人还活着。
      33.类别的作用?继承和类别在实现中有何区别? category 可以在不获悉,不改变原来代码的情况下往里面添加新的方法,只能添加,不能删除修改。 并且如果类别和原来类中的方法产生名称冲突,则类别将覆盖原来的方法,因为类别具有更高的优先级。 类别主要有3个作用: (1)将类的实现分散到多个不同文件或多个不同框架中。 (2)创建对私有方法的前向引用。 (3)向对象添加非正式协议。 继承可以增加,修改或者删除方法,并且可以增加属性。
      34.类别和类扩展的区别。 category和extensions的不同在于 后者可以添加属性。另外后者添加的方法是必须要实现的。 extensions可以认为是一个私有的Category。
      35.oc中的协议和java中的接口概念有何不同? OC中的代理有2层含义,官方定义为 formal和informal protocol。前者和Java接口一样。 informal protocol中的方法属于设计模式考虑范畴,不是必须实现的,但是如果有实现,就会改变类的属性。 其实关于正式协议,类别和非正式协议我很早前学习的时候大致看过,也写在了学习教程里 “非正式协议概念其实就是类别的另一种表达方式“这里有一些你可能希望实现的方法,你可以使用他们更好的完成工作”。 这个意思是,这些是可选的。比如我门要一个更好的方法,我们就会申明一个这样的类别去实现。然后你在后期可以直接使用这些更好的方法。 这么看,总觉得类别这玩意儿有点像协议的可选协议。" 现在来看,其实protocal已经开始对两者都统一和规范起来操作,因为资料中说“非正式协议使用interface修饰“, 现在我们看到协议中两个修饰词:“必须实现(@requied)”和“可选实现(@optional)”。
    3. 代理的作用?
      代理的目的是改变或传递控制链。允许一个类在某些特定时刻通知到其他类,而不需要获取到那些类的指针。可以减少框架复杂度。
      另外一点,代理可以理解为java中的回调监听机制的一种类似。
      37 . oc中可修改和不可以修改类型。
      可修改不可修改的集合类。这个我个人简单理解就是可动态添加修改和不可动态添加修改一样。
      比如NSArray和NSMutableArray。前者在初始化后的内存控件就是固定不可变的,后者可以添加等,可以动态申请新的内存空间
    4. 我们说的oc是动态运行时语言是什么意思?
      多态。 主要是将数据类型的确定由编译时,推迟到了运行时。
      这个问题其实浅涉及到两个概念,运行时和多态。
      简单来说,运行时机制使我们直到运行时才去决定一个对象的类别,以及调用该类别对象指定方法。
      多态:不同对象以自己的方式响应相同的消息的能力叫做多态。意思就是假设生物类(life)都用有一个相同的方法-eat;
      那人类属于生物,猪也属于生物,都继承了life后,实现各自的eat,但是调用是我们只需调用各自的eat方法。
      也就是不同的对象以自己的方式响应了相同的消息(响应了eat这个选择器)。 因此也可以说,运行时机制是多态的基础?
      40.通知和协议的不同之处?
      协议有控制链(has-a)的关系,通知没有。
      首先我一开始也不太明白,什么叫控制链(专业术语了~)。但是简单分析下通知和代理的行为模式,我们大致可以有自己的理解
      简单来说,通知的话,它可以一对多,一条消息可以发送给多个消息接受者。
      代理按我们的理解,到不是直接说不能一对多,比如我们知道的明星经济代理人,很多时候一个经济人负责好几个明星的事务。
      只是对于不同明星间,代理的事物对象都是不一样的,一一对应,不可能说明天要处理A明星要一个发布会,代理人发出处理发布会的消息后,别称B的 发布会了。但是通知就不一样,他只关心发出通知,而不关心多少接收到感兴趣要处理。 因此控制链(has-a从英语单词大致可以看出,单一拥有和可控制的对应关系。
    5. frame和bounds有什么不同?
      frame指的是:该view在父view坐标系统中的位置和大小。(参照点是父亲的坐标系统)
      bounds指的是:该view在本身坐标系统中 的位置和大小。(参照点是本身坐标系统)
    6. 方法和选择器有何不同?
      selector是一个方法的名字,method是一个组合体,包含了名字和实现.
    7. 是否在一个视图控制器中嵌入两个tableview控制器?
      一个视图控制只提供了一个View视图,理论上一个tableViewController也不能放吧,只能说可以嵌入一个tableview视图。当然,题目本身也有歧义,如果不是我们定性思维认为的UIViewController, 而是宏观的表示视图控制者,那我们倒是可以把其看成一个视图控制者,它可以控制多个视图控制器,比如TabbarController 那样的感觉。
    8. 一个tableView是否可以关联两个不同的数据源?你会怎么处理?
      首先我们从代码来看,数据源如何关联上的,其实是在数据源关联的代理方法里实现的。 因此我们并不关心如何去关联他,他怎么关联上,方法只是让我返回根据自己的需要去设置如相关的数据源。 因此,我觉得可以设置多个数据源啊,但是有个问题是,你这是想干嘛呢?想让列表如何显示,不同的数据源分区块显示?
    9. id、nil代表什么?
      id和void *并非完全一样。在上面的代码中,id是指向struct objc_object的一个指针,这个意思基本上是说,id是一个指向任何一个继承了Object(或者NSObject)类的对象。需要注意的是id是一个指针,所以你在使用id的时候不需要加星号。比如id foo=nil定义了一个nil指针,这个指针指向NSObject的一个任意子类。而id foo=nil则定义了一个指针,这个指针指向另一个指针,被指向的这个指针指向NSObject的一个子类。
      nil和C语言的NULL相同,在objc/objc.h中定义。nil表示一个Objctive-C对象,这个对象的指针指向空(没有东西就是空)。
      首字母大写的Nil和nil有一点不一样,Nil定义一个指向空的类(是Class,而不是对象)。
      SEL是“selector”的一个类型,表示一个方法的名字
      Method(我们常说的方法)表示一种类型,这种类型与selector和实现(implementation)相关
      IMP 定义为 id (
      IMP ) ( id , SEL , …) 。这样说来, IMP 是一个指向函数的指针,这个被指向的 函 数包括 id(“ self ” 指针 ) ,调用的 SEL (方法名),再加上一些其他参数 . 说白了IMP就是实现方 法。
      4 6. 层和UIView的区别是什么?
      两者最大的区别是,图层不会直接渲染到屏幕上,UIView是iOS系统中界面元素的基础,所有的界面元素都是继承自它。它本身完全是由CoreAnimation来实现的。它真正的绘图部分,是由一个CALayer类来管理。UIView本身更像是一个CALayer的管理器。一个UIView上可以有n个CALayer,每个layer显示一种东西,增强UIView的展现能力。
    10. 什么是简便构造方法?
      简便构造方法一般由CocoaTouch框架提供,如NSNumber的 [+ numberWithBool:](file:///Users/xunyanan/Library/Developer/Shared/Documentation/DocSets/com.apple.adc.documentation.AppleiOS6.0.iOSLibrary.docset/Contents/Resources/Documents/documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/Reference/Reference.html#//apple_ref/occ/clm/NSNumber/numberWithBool:) [+ numberWithChar:](file:///Users/xunyanan/Library/Developer/Shared/Documentation/DocSets/com.apple.adc.documentation.AppleiOS6.0.iOSLibrary.docset/Contents/Resources/Documents/documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/Reference/Reference.html#//apple_ref/occ/clm/NSNumber/numberWithChar:) [+ numberWithDouble:](file:///Users/xunyanan/Library/Developer/Shared/Documentation/DocSets/com.apple.adc.documentation.AppleiOS6.0.iOSLibrary.docset/Contents/Resources/Documents/documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/Reference/Reference.html#//apple_ref/occ/clm/NSNumber/numberWithDouble:) [+ numberWithFloat:](file:///Users/xunyanan/Library/Developer/Shared/Documentation/DocSets/com.apple.adc.documentation.AppleiOS6.0.iOSLibrary.docset/Contents/Resources/Documents/documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/Reference/Reference.html#//apple_ref/occ/clm/NSNumber/numberWithFloat:) [+ numberWithInt:](file:///Users/xunyanan/Library/Developer/Shared/Documentation/DocSets/com.apple.adc.documentation.AppleiOS6.0.iOSLibrary.docset/Contents/Resources/Documents/documentation/Cocoa/Reference/Foundation/Classes/NSNumber_Class/Reference/Reference.html#//apple_ref/occ/clm/NSNumber/numberWithInt:) Foundation下大部分类均有简便构造方法,我们可以通过简便构造方法,获得系统给我们创建好的对象,并且不需要手动释放。
    11. 在iPhone应用中如何保存数据? 1.通过web服务,保存在服务器上 2.通过NSCoder固化机制,将对象保存在文件中 3.通过SQlite或CoreData保存在文件数据库中
      49.什么是coredata? coredata是苹果提供一套数据保存框架,其基于SQlite
      50.什么是NSManagedObject模型? NSManagedObject是NSObject的子类 ,也是coredata的重要组成部分,它是一个通用的类,实现了core data 模型层所需的基本功能,用户可通过子类化NSManagedObject,建立自己的数据模型。
    12. 什么是NSManagedobjectContext? NSManagedobjectContext对象负责应用和数据库之间的交互。

    相关文章

      网友评论

          本文标题:转载:经典题型

          本文链接:https://www.haomeiwen.com/subject/zagakttx.html