- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
iOS程序员面试分类模拟23
简答题
1.?@synthesize和@dynamic各表示什么?有什么区别?
正确答案:
@synthesize修饰的属性默认情况下由系统自动合成setter和getter(江南博哥)方法,除非开发者自己定义了这些方法;@synthesize经常用来更改属性的变量名,系统自动合成时默认变量名为_var,即在原变量名前加下画线。
??@dynamic用来明确禁止编译器自动合成属性存取方法和默认变量名_var,由程序员自己手动编写存取方法。
??对于@synthesize和@dynamic,由于前者明确让编译器自动合成存取方法和默认变量名,而后者明确禁止编译器自动合成存取方法和默认变量名,所以两者语义冲突,不可同时使用。
?
2.?Oracle数据库的一个表中有若干条数据,其占用的空间为10M,如果用delete语句删除表中所有的数据,那么此时这个表所占的空间为多大?
正确答案:
10M。数据库中delete操作类似于在Windows系统中把数据放到回收站,还可以恢复。因此,它不会立即释放所占的存储空间。如果想在删除数据后立即释放存储空间,那么可以使用truncate命令。
?
3.?用户下载一个大图片,分成很多份下载,如何使用GCD实现?
正确答案:
使用DispatchGroup追加block到GlobalGroupQueue,这些block如果全部执行完毕,那么就会执行通过dispatch_group_notify添加到主队列中的block,进行图片的合并处理。
??dispatch_queue_tqueue=dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
??dispatch_group_tgroup=dispatch_group_create();
??dispatch_group_async(group,queue,^{/*加载图片1*/});
??dispatch_group_async(group,queue,^{/*加载图片2*/});
??dispatch_group_async(group,queue,^{/*加载图片3*/});
??dispatch_group_notify(group,dispatch_get_main_queue(),^{
??//合并图片
??});
?
4.?如何理解GCD死锁?
正确答案:
所谓死锁,通常指两个操作相互等待对方完成,造成死循环,于是两个操作都无法完成,就产生了死锁。下面是一个死锁的代码示例。
??intmain(intargc,constchar*argv[]){
??@autoreleasepool{
??dispatch_sync(dispatch_get_main_queue(),^(void){
??NSLog(@这里死锁了);
??});
??}
??return0;
??}
??这个程序就是典型的死锁。程序将主队列和一个block传入GCD的同步函数dispatch_sync中,等待同步函数执行,直到同步函数返回。但是事实上,这个block永远不会被执行。因为main函数是在主队列中的,它是正在被执行的任务,而主队列中同时只能有一个任务在执行,也就是说只有队头的任务才能被执行。由于主队列是一个特殊的串行队列,它严格遵循FIFO的原则,所以block中的任务必须等到main函数执行完,才能被执行。另外,dispatch_sync函数的特性是,只有block中的任务被执行完毕,才会返回。因此,只要block不被执行,它就不会返回。所以,在这段代码中,main函数等待dispatch_sync函数返回,而dispatch_sync的返回又依赖block执行完毕,block的执行又需要等待main函数的执行结束。这样就造成了三方循环等待,即死锁。
??可以总结出GCD死锁的原因大体有以下两点:
??1)GCD函数未返回,会阻塞正在执行的任务。这里需要强调的是,阻塞(blocking)和死锁(deadlock)是不同的意思。阻塞表示A任务的执行需要等待B任务的完成,称作B会阻塞A,通俗来讲就是强制等待的意思。而死锁表示A任务和B任务相互等待,形成阻塞闭环。
??2)队列中的任务无法并发执行。
??以上两点,如果同时出现,那么就会产生阻塞闭环,形成死锁。所以针对以上情况,只需要消除其中任何一个因素,就可以打破这个闭环,避免死锁。
??解决GCD死锁的方法有以下几种方式:
??1)使用dispatch_async函数。dispatch_async函数是异步函数,具备开启
您可能关注的文档
最近下载
- 小区挡土墙监测的方案.doc
- 组织安全绩效提升与重大事故预防HOP.pdf VIP
- 2021版35kV~750kV 变电站通用设备技术规范第13部分:接地变压器及消弧线圈成套装置.pdf VIP
- 心脏横纹肌瘤的科普知识课件.pptx VIP
- 2021版35kV~750kV 变电站通用设备技术要求及接口规范第2部分:高压并联电抗器.pdf VIP
- 新概念英语二册Mp3教程附音频下载-英语听力_0.pdf VIP
- 2021版35kV~750kV 变电站通用设备技术规范第9部分:低压并联电抗器.pdf VIP
- 2021版35kV~750kV 变电站通用设备技术规范第第12部分:站用变压器.pdf VIP
- 初一有理数计算700题.docx VIP
- 市政供热管网施工技术的方案.doc
文档评论(0)