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);
    }

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

  • 相关阅读:
    1052 Linked List Sorting (25 分)
    1051 Pop Sequence (25 分)
    1050 String Subtraction (20 分)
    1049 Counting Ones (30 分)
    1048 Find Coins (25 分)
    1047 Student List for Course (25 分)
    1046 Shortest Distance (20 分)
    1045 Favorite Color Stripe (30 分)
    1044 Shopping in Mars (25 分)
    1055 The World's Richest (25 分)
  • 原文地址:https://www.cnblogs.com/mumue/p/3100818.html
Copyright © 2011-2022 走看看