您的位置:首页 > 职场人生

IOS面试题--003 .

2014-03-02 11:32 218 查看
1、    描述应用程序的启动顺序。

willFinishLaunchingWithOptions

didFinishLaunchingWithOptions

applicationDidBecomeActive

当电话过来了

applicationWillResignActive//取消活跃状态

电话结束或者取消.变为活跃状态

点home

取消活跃状态进到后台

applicationDidEnterBackground

从后台挂起后再次进入,先

applicationWillEnterForeGround

变为活跃状态

2、    为什么很多内置类如UITableViewControl的delegate属性都是assign而不是retain?请举例说明。

会引起循环引用。

这里delegate我们只是想得到实现了它delegate方法的对象,然后拿到这个对象的指针就可以了,我们不期望去改变它或者做别的什么操作,所以我们只要用assign拿到它的指针就可以了。

而用retain的话,计数器加1。我们有可能在别的地方期望释放掉delegate这个对象,然后通过一些判断比如说它是否已经被释放,做一些操作。但是实际上它retainCount还是1,没有被释放掉,

两者相互持有.RC永远不会变成0;dealloc不会执行,两者都不会释放.

3、    使用UITableView时候必须要实现的几种方法?

-(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section;

-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;

4、    写一个便利构造器。

-(id)initWithName(NSString *)name age(int)age sex(NSString *)sex

{

self = [super init];

if (self){

    [self setName:name];

    [self setAge:age];

    [self setSex:sex];

}

    return self;

}

+(id)initWithName(NSString *)name age(int)age sex(NSString *)sex

{

  Person *p = [[Person alloc]initWithName:name age:age sex:sex];

    return [p autorelease];

}

5、UIImage初始化一张图片有几种方法?简述各自的优缺点。

imageNamed:系统会先检查系统缓存中是否有该名字的Image,如果有的话,则直接返回,如果没有,则先加载图像到缓存,然后再返回。

initWithContentsOfFile:系统不会检查系统缓存,而直接从文件系统中加载并返回。

imageWithCGImage:scale:orientation 当scale=1的时候图像为原始大小,orientation制定绘制图像的方向。    截图使用

6、    回答person的retainCount值,并解释为什么

Person * per = [[Person alloc] init];

self.person = per;

RC= 2;

per.retainCount = 1 ,

set方法调用retain

setter方法引用计数再+1

7、    这段代码有什么问题吗:

@implementation Person

- (void)setAge:(int)newAge {

self.age = newAge;

}

@end

self.age在左边也是相当于setter方法,这就导致了死循环

8、    这段代码有什么问题,如何修改

for (int i = 0; i < someLargeNumber; i++) {

@autoreleasePool{NSString *string = @”Abc”;

string = [string lowercaseString];

string = [string stringByAppendingString:@"xyz"];

NSLog(@“%@”, string);

}}

内存泄露.方法自带的自动释放池来不及释放.

在for循环中,自己添加内存池,产生一个释放一个

上面的自动释放池是我手动添加的

9、    截取字符串”20|http://www.baidu.com”中,”|”字符前面和后面的数据,分别输出它们。

NSString *str = @“20|http://www.baidu.com”;

NSArray*arr=[str componentsSeparatedByString:@“|”];

NSLog(@“%@%@”,[arr objectAtIndex:0],[arr objectAtIndex:1]);

10、    用obj-c写一个冒泡排序

NSMutableArray *arr = [NSMutableArray arrayWithCapacity:10];

    for (int i = 0; i <10; i++) {

        [arr addObject:[NSNumber numberWithInt:arc4random()%1000]];

    }

    NSLog(@"====%@",arr);

    

    for (int i = 0; i < arr.count -1; i++){

        for(int j = 0 ;j < arr.count - i - 1; j++){

            NSNumber* num1 = [arr objectAtIndex:j];

            NSNumber* num2 = [arr objectAtIndex:j+1];

            if( [num1 compare:num2]==NSOrderedDescending){

                [arr exchangeObjectAtIndex:j withObjectAtIndex:j+1];

            }

        }

    }

    NSLog(@"------%@",arr);

文章源地址:http://blog.csdn.net/u013082522/article/details/20004069
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: