iOS面试题-第三页

21.为什么很多内置类如UITableViewControl的delegate属性都是assign而不是retain?

防止循环引用.

如:对象A引用了对象B,对象B引用了对象C,对象C引用了对象B,这个时候B的引用计数是2,而C的引用计数是1,当A不再使用B的时候,就释放了B的所有权,这个时候C还引用对象B,所以B不会释放,引用计数为1,因为B也引用着对象C,B不释放,那么C也就不会被释放,所以他们的引用计数都为1,并且永远不会被释放,形成了循环引用.

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

2个数据源方法.分别是:

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

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

23.写一个遍历构造器.

+(id)leftModelWith{

leftModel * model = [self alloc]init];

return model;

}

24.UIImage初始化一张图片有几种方法?简述其特点?

3种,

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

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

imageWithCGImage:scale:orientation 当scale= 1的时候图像为原始大小,orientation指定绘制图像的方向.

25.person的retainCount值,并解释为什么?

Person * per = [Person alloc]init];

self.person = per;

1或者2.看person是什么类型修饰的.

alloc+1,assign+0,retain+1.

26.下面这段代码有何问题?

@implementation Person

- (void)setAge:(int)newAge {

self.age = newAge;

}

@end

死循环

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

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

NSString *string = @”Abc”;

string = [string lowercaseString];

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

NSLog(@“%@”, string);

}

加入自动释放池@autoreleasepool{};

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

@antoreleasepool {

NSString *string = @”Abc”;

string = [string lowercaseString];

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

NSLog(@“%@”, string);

}

}

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

["20 | http://www.baidu.com" componentSeparatedByString:@"|"];

29.用obj-c 写一个冒泡排序.

NSMutableArray *ary = [@[@"1", @"2", @"3", @"4", @"6", @"5"] mutableCopy];

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

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

if ([ary[j] integerValue] < [ary[j + 1] integerValue]) {

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

}

}

}

NSLog(@"%@", ary);

30.简述对UIView.UIWindow和CALayer的理解.

UIWindow是应用的窗口,继承于UIView.

UIView继承于UIResponder,是创建窗口中的一个视图,可以响应交互事件.一个程序只有一个主window,可以有多个window.

CALayer图层,一个view可有多个图层,不可以响应事件.

你可能感兴趣的:(iOS面试题-第三页)