博客> BAT面试必备技能,这些你知道吗?
BAT面试必备技能,这些你知道吗?
1小时前 评论:0 阅读:22 胖虎_callmeV
iOS开发 oc swift 面试技巧

序言

凡经历过iOS面试的我们总会发觉,即使实际开发中做过许多项目,也难免为一个普通的面试题受挫。这也许不是因为我们技术不过关,而是因为在平时我们忽略了怎样将用到的知识很好的表述出来。闲暇之余小编把一些常见的iOS面试问题总结一下,即使不是为了面试,也有助于对基础知识的回顾。

1、Objective-C

●你是否接触过OC中的反射机制?简单聊一下概念和使用

Class反射

通过类名的字符串形式实例化对象

Class class NSClassFromString@(@”student”);
Student *stu = [[class alloc ]init];

将类名变为字符串

Class class =[Student class];
NSString*className = NSStringFromClass(class);

SEL的反射通过方法的字符串形式实例化方法

SEL selector = NSSelectorFromClass(@”setName”);
[stu perform Selector:selector withObject:@”Mike”];

将方法变成字符串

NSString FomrSelector(@selector*(setName:))

●编写一个函数,实现递归删除指定路径下的所有文件

+ (void)deleteFiles:(NSString *)path;{
   /1.判断文件还是目录
  NSFileManager * fileManger = [NSFileManager defaultManager];
  BOOL isDir = NO;

  BOOL isExist = [fileManger fileExistsAtPath:path isDirectory:&isDir];
  if (isExist) {
    /2.判断是不是目录
    if (isDir) {
    NSArray * dirArray = [fileManger 
    contentsOfDirectoryAtPath:path error:nil];
       NSString * subPath = nil;
       for (NSString * str in dirArray) {
            subPath = [path stringByAppendingPathComponent:str];
            BOOL issubDir = NO;
            [fileManger fileExistsAtPath:subPath isDirectory:&issubDir];
            [self deleteFiles:subPath];
       }
   }else{
       NSLog(@"%@",path);
       [manager removeItemAtPath:filePath error:nil];
     }
  }else{
     NSLog(@"你打印的是目录或者不存在");
  }
}
  • OC是支持垃圾回收机制的(Garbage collection简称GC),但是apple的移动终端中,是不支持GC的,Mac桌面系统开发中是支持的.
  • 移动终端开发是支持ARC(Automatic Reference Counting的简称),ARC是在IOS5之后推出的新技术,它与GC的机制是不同的。我们在编写代码时, 不需要向对象发送release或者autorelease方法,也不可以调用delloc方法,编译器会在合适的位置自动给用户生成release消息(autorelease),ARC 的特点是自动引用技术简化了内存管理的难度.

2、Runloop&Runtime

●Runloop和线程有什么关系?

主线程的run loop默认是启动的

iOS的应用程序里面,程序启动后会有一个如下的main()函数

(arc,*argv[]){
@autoreleasepool{
Return UIApplicationMain(argc,argv,,NSStringFromClass([AppDelegate class]));
}
}

重点是UIApplicationMain()函数,这个方法会为mainthread设置一个NSRunLoop对象。这就解释了:为什么我们的应用可以在无人操作的时候休息,需要让它干活的时候又能立马响应。

对其它线程来说,runloop默认是没有启动的,runloop只在你要和线程有交互时才需要。在任何一个Cocoa程序的线程中,都可以通过以下代码来获取到当前贤臣的runloop。

NSRunLoop*runloop = [NSRunLoop currentRunLoop];

●Obiective-C如何对已有的方法,添加自己的功能代码以实现类似记录日志这样的功能?

+(NSString *)myLog

{
/这里写打印行号,什么方法,哪个类调用等等
}

/加载分类到内存的时候调用
  +(void)load

  {
  /获取imageWithName方法地址
  Method description = class_getClassMethod(self, @selector(description));

  /获取imageWithName方法地址
  Method myLog = class_getClassMethod(self, @selector(myLog));

  /交换方法地址,相当于交换实现方式
  method_exchangeImplementations(description, myLog);
  }

3、Swift

●举例说明Swift里边有哪些是Objective-C中没有的?

Swift引入了在Objective-C中没有的一些高级数据类型,例如tuples(元祖),可以使你创建和传递一组数值。

Swift还引入了可选项类型(Optionals),用于处理变量值不存在的情况。可选项的意思有两种,一种变量是存在的,例如等于X,而是变量值根本不存在。Optionals类似于Objective-C中指向nil的指针、但是适用于所有的数据类型,而非仅仅局限于类,Optionals相比于Objective-C中nil指针更加安全简明,并且也是Swift诸多最大功能的核心。

4、KVO-KVC

●KVC的底层实现? 当一个对象调用setValue方法时,方法内部会做以下操作:

①检查是否存在相应key的set方法,如果存在,就调用set方法

②如果set方法不存在,就会查找与key相同名称并且带下划线的成员属性,如果有,则直接给成员属性赋值

③如果没有找到_key,就会查找相同名称的属性key,如果有就直接赋值

④如果还没找到,则调用valueForUndefinedKey:和setValue:forUndefinedKey:方法。

这些方法的默认实现都是抛出异常,我们可以根据需要重写它们。

●KVO的底层实现?

  • kvo基于runtime机制实现。

  • 使用了isa混写(isa-swizzling),当一个对象(假设是person对象,person的类是MYPerson)的属性值(假设person的age)发生改变时,系统会自动生成一个类,继承自MYPerson:NSKVONotifying_MYPerson,在这个类的setAge方法里面,调用[super setAge:age] [self willChangeValueForKey:@"age"] 和 [self didChangeValueForKey:@"age"],而这两个方法内部会主动调用监听者内部的 - (void)observeValueForKeyPath 这个方法。

  • 想要看到NSKVONotifying_MYPerson很简单,在self.person.age = 20; 这里打断点,在调试区域就能看到_person->NSobject->isa=(Class)NSKVONotifying_MYPerson,同时我们在 self.person = [[MYPerson alloc]init];后面打断点,看到_person->NSObject->isa=(Class)MYPerson,由此可见,在添加监听者之后,person类型已经由MYPerson被改变成NSKVONotifying_MYPerson

最后

有人说iOS行情越来越难,其实这种说话并不准确,在移动网络愈加普及的今天,iOS程序员失业的情况是不会出现的。目前市场上iOS初级开发者人满为患,但中级高级的开发者依旧非常稀缺,在这个时候,就需要提高自己的技术。

过年在即,找工作和面试又被提上了日程,为了解决小伙伴们的燃眉之急,小编特地为大家整理了一份BAT面试题,需要的可以加小编的QQ群:923910776 希望对大家有所帮助,后期会不断更新添加新的面试题,可以帮大家查漏补缺。

文章来源于网络,如有侵权请联系小编删除

收藏
0
sina weixin mail 回到顶部
初步数据显示普京得票率超75% 在首轮选举中胜出 奥沙利文10-7逆转马奎尔 艾伦半场6-3海菲尔德 东决至今最大的判罚争议!3分被吹了进攻犯规 特朗普批FBI在其团队安插“间谍” 或为转移视线 首批虚商正式牌照下发 阿里小米等15家企业“领证” 大比分惨败陈金刚揽责:责任在我 我没有布置好 中国代表团副团长:基本实现目标 金牌数有点遗憾 重庆开放自动驾驶汽车合法“路测” 美媒:爱国者导弹拦截成功率仅9% 但军火公司却大赚 围甲联赛赛果:柯洁负李世石 唐韦星胜金志锡 围棋世界排名柯洁涨21分 芈昱廷赶超井山排第4 外媒头条:主要汽车出口国计划针对关税威胁召开会议
曝詹姆斯曾反对骑士交易欧文 只怪后者太绝情? 5G第一版国际标准将于今年6月完成 专家:排超决赛7场4胜考验谁 上海力争速战速决 NBA史上最强人要做跨界舞王 71岁身手不减当年 梅罗世界冠军之梦 中国踢不了世界杯还能拼这个 2年前还是山东首富如今破产 大豆之王走向不归路 韩吐槽:济州精神失常 在羊群里出人头地还是羊 专访乔丹高层:签球员看重颜值 CBA需要造星 进球gif-鲁能角球制造杀机 塔神乱战先拔头筹 鲁媒:胡金秋加大动作 劳森手臂不适一度离场 从中甲降级后如今中乙垫底 这支队不得不换帅求生 马英九被控泄密案二审改判获刑四个月 国台办回应
埃德尔首秀破门延续苏宁优良传统 他让1人有点尴尬 山东省委书记讲话网上刷屏 回应:有误差因为川普 美国加利福尼亚州发生枪击事件 疑似有三人被劫持 互联网元老投资人:5年内加密货币将成主要支付手段 大乐透第18045期精品杀号:连号形态继续走空 这名山西退休局长公车私用 被北京纪委党内处分 菲律宾众议长闪电换人 前总统阿罗约宣誓就职(图) 李彦宏两会呼吁:应尽快把控烟政策推广到全国 亚特兰冷负桑普多 18045期任九开6916注2189… 投资两万的小型加工厂 微信怎么挣钱 微信赚钱的三大方法 前景最好的十大专业 AG亚游集团