美文网首页
iOS---2017校招面试题(1)

iOS---2017校招面试题(1)

作者: wps_pro | 来源:发表于2017-04-19 12:09 被阅读0次

    1.谈谈你做过的项目;
    2.项目中最有成就感的部分;
    3.倒计时如何实现?(NSTimer,还有其他的实现方式吗);
    方法1:使用NSTimer来实现
    主要使用的是NSTimer的scheduledTimerWithTimeInterval方法来每1秒执行一次timeFireMethod函数,timeFireMethod进行倒计时的一些操作,完成时把timer给invalidate掉就ok了,代码如下:

    secondsCountDown = 60;//60秒倒计时
    countDownTimer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timeFireMethod) userInfo:nil repeats:YES];
    -(void)timeFireMethod{
    secondsCountDown--;
    if(secondsCountDown==0){
    [countDownTimer invalidate];
    }
    }

    方法2:使用GCD来实现
    代码如下:
    __block int timeout=300; //倒计时时间
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_source_t _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue);
    dispatch_source_set_timer(_timer,dispatch_walltime(NULL, 0),1.0*NSEC_PER_SEC, 0); //每秒执行
    dispatch_source_set_event_handler(_timer, ^{
    if(timeout<=0){ //倒计时结束,关闭
    dispatch_source_cancel(_timer);
    dispatch_release(_timer);
    dispatch_async(dispatch_get_main_queue(), ^{
    //设置界面的按钮显示 根据自己需求设置
    。。。。。。。。
    });
    }else{
    int minutes = timeout / 60;
    int seconds = timeout % 60;
    NSString *strTime = [NSString stringWithFormat:@"%d分%.2d秒后重新获取验证码",minutes, seconds];
    dispatch_async(dispatch_get_main_queue(), ^{
    //设置界面的按钮显示 根据自己需求设置
    。。。。。。。。
    });
    timeout--;

      }  
    

    });
    dispatch_resume(_timer);

    4.UIButton的继承关系?
    UIButton的父类是UIControl,UIControl的父类是UIView,UIView的父类是UIResponder,UIResponder父类是NSObject;

    5.iOS中可以进行输入的控件?
    (UITextView,UITextField);

    6.快排的实现原理;
    “快速排序法”使用的是递归原理,下面我结合一个例子来说明“快速排序法”的原理。首先给出一个数组{53,12,98,63,18,72,80,46, 32,21},先找到第一个数--53,把它作为中间值,也就是说,要把53放在一个位置,使得它左边的值比它小,右边的值比它大。{21,12,32, 46,18,53,80,72,63,98},这样一个数组的排序就变成了两个小数组的排序--53左边的数组和53右边的数组,而这两个数组继续用同样的方式继续下去,一直到顺序完全正确。

    7.短信验证码会有倒计时功能吗?第一次验证失败后还可以再进行验证吗?
    有倒计时功能,一般情况下,验证码在倒计时的周期内无法再次获取验证码,倒计时结束后可以再次请求接收验证码,一般会将这个包含倒计时功能的button进行封装。

    8.Android开发和iOS开发的区别;
    Android是开源,使用的语言是java语言。
    ios是封闭,不是开源,使用的语言是oc语言。
    开发上来说android设备多,要考虑适配。ios由于设备有限所以适配几乎无需考虑,兼容性非常好。
    相同点:都是面向对象编程,开发的应用效果一样,功能都可以实现。

    9.你使用过Objective-C的运行时编程(Runtime Programming)么?如果使用过,你用它做了什么?你还能记得你所使用的相关的头文件或者某些方法的名称吗?
    1.,归档啊,动态添加属性啊,头文件:#import <objc/runtime.h>
    方法名称:
    // 1.获得类中的所有成员变量
    Ivar*ivarList =class_copyIvarList([selfclass], &count);
    //2.获得方法的名字的字符串
    NSSelectorFromString(_cmd)
    //3.发送消息函数
    objc_msgSend()

    相关文章

      网友评论

          本文标题:iOS---2017校招面试题(1)

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