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可有多个图层,不可以响应事件.