iOS面试3

来源:互联网 发布:天天pk10计划软件 编辑:程序博客网 时间:2024/05/01 10:46
  1. 描述应用程序的启动顺序。
    1、程序入口main函数创建UIApplication实例和UIApplication代理实例2、在UIApplication代理实例中重写启动方法,设置第一ViewController3、在第一ViewController中添加控件,实现对应的程序界面。

为什么很多内置类如UITableViewControl的delegate属性都是assign而不是retain?请举例说明。
防止循环引用,
Student * str=[];

Teacher *teacher=[[Teacher alloc] init];

Student * student=[[Student alloc] init];

teacher.delegate=student;

student.delegate= teacher;

teacherdeallocrelease当前的Delegate,就会触发student对象release,继而也会导致student执行dealloc,在student中也会release自己的delegate,产生循环了。

  1. 使用UITableView时候必须要实现的几种方法?
    2个。
    -(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section;这个方法返回每个分区的行数-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath)indexPath;这个方法返回我们调用的每一个单元格
  2. 写一个便利构造器。
    + (id)studentWithName:(NSString *)newName andAge:(int)newAge{Student *stu = [[Student alloc] initWithName:newName andAge:newAge];return [stu autorelease];}
  3. UIImage初始化一张图片有几种方法?简述各自的优缺点。
    1、从资源读取UIImage *image = [UIImage imageNamed:@”1.png”];2、从网络读取NSURL*url=[NSURL URLWithString:@"http://www.sinaimg.cn/qc/photo_auto/chezhan/2012/50/00/15/80046_950.jpg"];3.从手机本地读取//读取本地图片非resourceNSString *aPath3=[NSString stringWithFormat:@"%@/Documents/%@.jpg",NSHomeDirectory(),@"test"];UIImage *imgFromUrl3=[[UIImage alloc]initWithContentsOfFile:aPath3]; 4.从现有的context中获得图像

//add ImageIO.framework and #import <ImageIO/ImageIO.h>  

CGImageSourceRef source = CGImageSourceCreateWithURL((CFURLRef)url, NULL);

CGImageRef img= CGImageSourceCreateImageAtIndex(source,0,NULL);

CGContextRef ctx=UIGraphicsGetCurrentContext();

CGContextSaveGState(ctx);

//transformCTM2种方式

//CGContextConcatCTM(ctx, CGAffineTransformMakeScale(.2, -0.2));

//CGContextScaleCTM(ctx,1,-1);

//注意坐标要反下,ctx来作为图片源 

CGImageRef capture=CGBitmapContextCreateImage(ctx);

CGContextDrawImage(ctx, CGRectMake(160, 0, 160, 230), [image CGImage]);

CGContextDrawImage(ctx, CGRectMake(160, 230, 160, 230), img);

CGImageRef capture2=CGBitmapContextCreateImage(ctx);

5、用QuartzCGImageSourceRef来读取图片

CGImageSourceRef source = CGImageSourceCreateWithURL((CFURLRef)url, NULL);

CGImageRef img= CGImageSourceCreateImageAtIndex(source,0,NULL);

参考(http://blog.csdn.net/jerryvon/article/details/7526147#

  1. 回答person的retainCount值,并解释为什么

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

self.person = per;person属性如果为assign的话retainCount1,如果为retain的话retainCount2

  1. 这段代码有什么问题吗:

@implementation Person

- (void)setAge:(int)newAge {

self.age = newAge;

}

@end死循环

  1. 这段代码有什么问题,如何修改

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

NSString *string = @”Abc”;

string = [string lowercaseString];

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

NSLog(@“%@”, string);

}

如果数字很大的话会造成内存一直增加(因为一直通过便利构造器方法创建autorelease对象),直到循环结束才减少,在循环内加一个自动释放池,更改后代码如下:

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

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

string = [string lowercaseString];

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

NSLog(@“%@”, string);


}

}


  1. 截取字符串”20 |http://www.baidu.com”中,”|”字符前面和后面的数据,分别输出它们。NSString *string = @” 20 |http://www.baidu.com”;[string componentsSeparatedByString:@”|”];
  2. 用obj-c写一个冒泡排序

NSMutableArray *array = [NSMutableArray arrayWithArray:@[@"3",@"1",@"10",@"5",@"2",@"7",@"12",@"4",@"8"]];

    NSString  *tmp;

    for (int i = 0; i < array.count; i ++) {

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

            if ([[array objectAtIndex:j] integerValue] > [[array objectAtIndex:j + 1] integerValue]) {

                tmp = [array objectAtIndex:j];

                [array replaceObjectAtIndex:j withObject:[array objectAtIndex:j + 1]];

                [array replaceObjectAtIndex:j + 1 withObject:tmp];

            }

        }

    }




0 0
原创粉丝点击