免备案自助建站网站,Wordpress会员插件出错,ajax ie8 wordpress,wordpress视觉差而技术开发面试#xff0c;问一些技术相关的问题是必须的#xff0c;最新的技术可能人人都趋之若鹜#xff0c;但有些原理和基础的也希望都有了解。 这里整理了一些iOS相关的面试题#xff0c;#xff08;可能都已经老掉牙#xff09;但是也想跟大家分享下#xff01; 如… 而技术开发面试问一些技术相关的问题是必须的最新的技术可能人人都趋之若鹜但有些原理和基础的也希望都有了解。 这里整理了一些iOS相关的面试题可能都已经老掉牙但是也想跟大家分享下 如果答案有出入或不准确的地方也欢迎大家指正。 1.简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release为什么需要与alloc配对使用的方法是dealloc还是release为什么readwritereadonlyassignretaincopynonatomic 、atomic、strong、weak属性的作用 管理机制使用了一种叫做引用计数的机制来管理内存中的对象。OC中每个对象都对应着他们自己的引用计数引用计数可以理解为一个整数计数器当使用alloc方法创建对象的时候持有计数会自动设置为1。当你向一个对象发送retain消息 时持有计数数值会增加1。相反当你像一个对象发送release消息时持有计数数值会减小1。当对象的持有计数变为0的时候对象会释放自己所占用的内存。 retain(引用计数加1)-release引用计数减1 alloc申请内存空间-dealloc(释放内存空间) readwrite: 表示既有getter也有setter (默认) readonly: 表示只有getter没有setter nonatomic:不考虑线程安全 atomic:线程操作安全 默认 线程安全情况下的setter和getter - (NSString*) value { synchronized(self) { return [[_value retain] autorelease]; }} (void) setValue:(NSString*)aValue { synchronized(self) { [aValue retain]; [_value release]; _value aValue; } } retain: release旧的对象将旧对象的值赋予输入对象再提高输入对象的索引计数为1 assign: 简单赋值不更改索引计数 默认 copy: 其实是建立了一个相同的对象,地址不同retain指针拷贝 copy内容拷贝 strong:ARC下的和MRCretain一样 默认 weak:ARC下的和MRCassign一样 weak当指向的内存释放掉后自动nil化防止野指针 unsafe_unretained 声明一个弱应用但是不会自动nil化也就是说如果所指向的内存区域被释放了这个指针就是一个野指针了。 autoreleasing 用来修饰一个函数的参数这个参数会在函数返回的时候被自动释放。 2.类变量的protected ,private,public,package声明各有什么含义 private作用范围只能在自身类 protected作用范围在自身类和继承自己的子类 默认 public作用范围最大可以在任何地方被访问。 package这个类型最常用于框架类的实例变量,同一包内能用跨包就不能访问 3.线程是什么进程是什么二者有什么区别和联系 一个程序至少有一个进程,一个进程至少有一个线程 进程一个程序的一次运行在执行过程中拥有独立的内存单元而多个线程共享一块内存 线程线程是指进程内的一个执行单元。 联系线程是进程的基本组成单位 区别(1)调度线程作为调度和分配的基本单位进程作为拥有资源的基本单位 (2)并发性不仅进程之间可以并发执行同一个进程的多个线程之间也可并发执行 (3)拥有资源进程是拥有资源的一个独立单位线程不拥有系统资源但可以访问隶属于进程的资源. (4)系统开销在创建或撤消进程时由于系统都要为之分配和回收资源导致系统的开销明显大于创建或撤消线程时的开销。 举例说明操作系统有多个软件在运行QQ、office、音乐等这些都是一个个进程而每个进程里又有好多线程比如QQ你可以同时聊天发送文件等 4.谈谈你对多线程开发的理解ios中有几种实现多线程的方法 好处 1.使用线程可以把占据时间长的程序中的任务放到后台去处理 2.用户界面可以更加吸引人这样比如用户点击了一个按钮去触发某些事件的处理可以弹出一个进度条来显示处理的进度 3.程序的运行速度可能加快 4·在一些等待的任务实现上如用户输入、文件读写和网络收发数据等线程就比较有用了。 缺点 1.如果有大量的线程,会影响性能,因为操作系统需要在它们之间切换。 2.更多的线程需要更多的内存空间。 3.线程的中止需要考虑其对程序运行的影响。 4.通常块模型数据是在多个线程间共享的需要防止线程死锁情况的发生。 实现多线程的方法 NSObject类方法 NSThread NSOperation GCD 5.线程同步和异步的区别IOS中如何实现多线程的同步 异步举个简单的例子 就是游戏游戏会有图像和背景音乐 同步:是指一个线程要等待上一个线程执行完之后才开始执行当前的线程,上厕所 NSOperationQueuemaxcurrentcount NSConditionLock GCD-http://blog.csdn.net/onlyou930/article/details/8225906 br / 6.假设有一个字符串aabcad请写一段程序去掉字符串中不相邻的重复字符串即上述字符串处理之后的输出结果为aabcd NSMutableString * str [[NSMutableString alloc]initWithFormat;“aabcad”]; for (int i 0 ,i str.length - 1 ;i){ unsigned char a [str characterAtIndex:i]; for (int j i 1 ,j str.length ,j){ unsigned char b [str characterAtIndex:j]; if (a b ){ if (j i 1){ }else{ [str deleteCharactersInRange:NSMakeRange(j, 1)]; } } } } NSLog(“%”,str); 7.获取一台设备唯一标识的方法有哪些 http://www.cnblogs.com/max5945/archive/2013/06/24/3152292.htmlbr / (1)UDID (2)UUID (3)MAC Address (4)OPEN UDID (5)广告标识符 (6)Vindor标示符 *ios7以后使用keychain 8.iOS类是否可以多继承如果没有那可以用其他方法实现吗简述实现过程。 不可以多继承 用protocol实现 9.堆和栈的区别 堆需要用户手动释放内存而栈则是编译器自动释放内存 问题扩展要知道OC中NSString的内存存储方式 10.iOS本地数据存储都有哪几种方式 NSKeyedArchiver NSUserDefaults Write写入方式 SQLite3 http://blog.csdn.net/tianyitianyi1/article/details/7713103br / (问题扩展什么情况下使用什么样的数据存储) 1.NSKeyedArchiver采用归档的形式来保存数据数据对象需要遵守NSCoding协议对象对应的类必须提供encodeWithCoder:和initWithCoder:方法。缺点只能一次性归档保存以及一次性解压。所以只能针对小量数据对数据操作比较笨拙如果想改动数据的某一小部分需要解压或归档整个数据。 2.NSUserDefaults用来保存应用程序设置和属性、用户保存的数据。用户再次打开程序或开机后这些数据仍然存在。NSUserDefaults可以存储的数据类型包括NSData、NSString、NSNumber、NSDate、NSArray、NSDictionary。缺点如果要存储其他类型需要转换为前面的类型才能用NSUserDefaults存储。 3.Write写入方式永久保存在磁盘中。第一步获得文件即将保存的路径第二步生成在该路径下的文件第三步往文件中写入数据最后从文件中读出数据 4. SQLite采用SQLite数据库来存储数据。SQLite作为一中小型数据库应用ios中跟前三种保存方式相比相对比较复杂一些。