现在的位置: 首页 > 综合 > 正文

iOS 面试记(一)

2012年10月16日 ⁄ 综合 ⁄ 共 2321字 ⁄ 字号 评论关闭

周四去面试了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);
}

 

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

抱歉!评论已关闭.