iOS开发面试题大全-3

  1. 描述应用程序的启动顺序。
     
    1、程序入口main函数创建UIApplication实例和UIApplication代理实例
    2、在UIApplication代理实例中重写启动方法,设置第一ViewController
    3、在第一ViewController中添加控件,实现对应的程序界面。
为什么很多内置类如 UITableViewControl delegate 属性都是 assign 而不是 retain ?请举例说明。
 
防止循环引用,
 
Student * str=[];
Teacher *teacher=[[Teacher alloc] init];
Student * student=[[Student alloc] init];
teacher.delegate=student;
student.delegate= teacher;
在teacher中dealloc会release当前的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.从手机本地读取
    //读取本地图片非resource
    NSString *aPath3=[NSString stringWithFormat:@"%@/Documents/%@.jpg",NSHomeDirectory(),@"test"];
    UIImage *imgFromUrl3=[[UIImage alloc]initWithContentsOfFile:aPath3]; 4.从现有的context中获得图像
//添加 ImageIO.framework and #import <ImageIO/ImageIO.h> 
CGImageSourceRef source = CGImageSourceCreateWithURL((CFURLRef)url, NULL);
CGImageRef img= CGImageSourceCreateImageAtIndex(source,0,NULL);
CGContextRef ctx=UIGraphicsGetCurrentContext();
CGContextSaveGState(ctx);
//transformCTM的2种方式
//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、用Quartz的CGImageSourceRef来读取图片
CGImageSourceRef source = CGImageSourceCreateWithURL((CFURLRef)url, NULL);
CGImageRef img= CGImageSourceCreateImageAtIndex(source,0,NULL);
  1. 回答person的retainCount值,并解释为什么
Person * per = [[Person alloc] init];
self.person = per;
 
person属性如果为assign的话retainCount为1,如果为retain的话retainCount为2
  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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值