zoukankan      html  css  js  c++  java
  • iOS 面试记(一)

    周四去面试了XX公司iOS程序员,费了半天劲才找到地方,居然在一个破宾馆里面,一间小房子,3对办公桌拼起来的办公室,

    一看到此情此景,我心顿时都凉了半截。房子里面热得要命,我坐那才一会,后背都湿了。

    管事的拿了份面试题给我做,我做的时候感觉挺简单,不过后来查资料,好像有些地方还是不太对。题目如下:

    1:Object-c有多重继承吗?没有的话有什么替代?

    我的回答:没有。用protocol代替

    网上答案:cocoa中的所有类都是NSObject的子类。多继承在这里是用protocol委托代理来实现的

    2:static作用?

    我的答案:静态声明。声明一个变量或方法为静态。静态变量在类的第一次实例化时,即分配存储空间。静态方法不需要类的实例即可访问。

    网上答案:
    (1)函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此此值在下次调用时扔维持上次的值。

    (2)在模块内的static全局变量可以被模块内所用的函数访问,但不能被模块外其他函数访问

    (3)在模块内的static函数只可被这一模块内的其他函数调用,这个函数的使用范围被限制在声明它的模块内

    (4)在类中的static成员变量属于整个类所拥有,对类的所有对象只有一份拷贝

    (5)在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量

    3:#import和#include的区别。@class代表什么?

    我的答案:区别在于#include可以避免循环引用的问题。@class代表的是其标识的是一个类,它在.m文件中#import。

    网上答案:@class一般用于头文件中需要声明该类的某个实例变量的时候用到,在m文件中还是需要#import。

    而#import比#include的好处就是不会引起交叉编译

    4:Object-c的内存管理是如何管理的?

    我的答案:
    引用计数:当使用alloc创建新实例或赋值retain、copy(或ARC中的strong)标识的变量时,实例或变量的引用计数即加一,当它们的引用计数为0时,则由GC回收

    网上答案:如果你通过分配和初始化,(比如[[MyClass alloc] init])的方式类创建对象,你就拥有这个对象,需要负责该对象的释放。这个规则在使用NSObject的便利方法new时也同样适用。如果你拷贝一个对象,你也拥有拷贝得到的对象,需要负责该对象的释放。如果你保持一个对象,你就部分拥有这个对象,需要在不再需要时释放

    5:view中的frame和bounds有什么不同?

    我的答案:view的frame代表的是父类中的view的位置。view的bounds代表的是view自己的坐标及长宽

    网上答案:

    frame指的是:该view在父view坐标系统中的位置和大小。(参照点是父亲的坐标系统)

    bounds指的是:该view在本身坐标系统中 的位置和大小。(参照点是本身坐标系统)

    6:如何在ios4.1以上使用ios3的代码(这个问题不太明白具体什么意思,按我的理解回答了)?

    我的答案:在ARC项目中使用非ARC的代码,需要在编译设置里设置:-fno-objc-arc

    7:请写一个委托代理的例子

    .h文件

    @protocol delegate;
    @required
    - (void)dosomething;
    @end
    
    @interface DelegateSimple<delegate>
    
    @end

    .m文件

    #import "DelegateSimple.h"
    
    @implementation DelegateSimple
    
    - (void)dosomething
    {
        NSLog(@"%@","This is implementation of the protocol");
    }
    
    @end

    8:请用block写出一个Singleton实例

    +(Class *)sharedInstance
    {
        static Class  *__singleton;
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
            __singleton = [[Class alloc] init];
        });
    
        return __singleton;
    }

    9:请写出你常用的多线程调用的方法

    -(void)downloadStringFromURL
    {
          NSURL *url = [NSURL URLWithString:[NSString stringWithFormart:@"%@", "www.xxxx.com"]];
    
        ASIHTTPRequest * request = [ASIHTTPRequest requestWithURL:url];
        [request setDelegate:self];
        [request startAsynchronous];
    }
    
    #pragma mark - ASIHTTPRequest异步请求回调方法
    - (void)requestFinished:(ASIHTTPRequest *)request
    {
        NSString *responseString = [request responseString];
        NSLog(@"%@", responseString);
    }
    
    - (void)requestFailed
    {
        NSError *error = [request error];
        NSLog(@"%@", error);
    }

    做完之后,办公室里又没有能做主的人,然后打电话给某某在正南京出差的汪总,跟他又聊了半天,看他好像聊得挺来劲,因为他在地铁里,信号不好,中途还断过一次电话。最后他问我薪资,我觉得这办公环境太差了点,就故意说高了点,他沉默了一会,让我回去等消息。

  • 相关阅读:
    Ajax删除效果
    40个有用的jQuery技术和教程
    ZAM 3D入门教程(8):Zam3D中的材质
    ZAM 3D入门教程(5):Lathe编辑器
    Windows Phone 7 玻璃框消息提示
    Ajax留言板
    ZAM 3D入门教程(1):初识ZAM 3D
    ZAM 3D入门教程(4):Extrusion编辑器
    C#生成CHM文件(汇总篇)
    推荐一些网站给大家
  • 原文地址:https://www.cnblogs.com/mumue/p/3100818.html
Copyright © 2011-2022 走看看