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,产生循环了。
2,使用UITableView时候必须要实现的几种方法?
2个。
-(NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section; 这个方法返回每个分区的行数
-(UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath)indexPath;这个方法返回我们调用的每一个单元格
3,写一个便利构造器。
+ (id)studentWithName:(NSString *)newName andAge:(int)newAge{
Student *stu = [[Student alloc] initWithName:newName andAge:newAge];
return [stu autorelease];
}
4,UIImage初始化一张图片有几种方法?简述各自的优缺点。
1、从资源读取 , 这个方法的图片是从缓存里面获取的, 先在缓存里面查看是不是有这个图片, 没有的话将图片添加进缓存再使用. 有的话直接使用缓存里面的. 如果这张图片用的次数比较多的话, 建议使用这种方式. 缺点是效率低下.UIImage *image = [UIImage imageNamed:@”1.png”];
2 .从手机本地读取, 比较第一种方式, 这个事直接加载图片的. 所以建议在图片使用率低的图片时 使用这个方法. //读取本地图片非resource
NSString *aPath3=[NSString stringWithFormat:@"%@/Documents/%@.jpg",NSHomeDirectory(),@"test"];[UIImage imageWithContentsOfFile:aPath3]
5,回答person的retainCount值,并解释为什么
Person * per = [[Person alloc] init];
self.person = per;person属性如果为assign的话retainCount为1,如果为retain的话retainCount为2
6,这段代码有什么问题吗:
@implementation Person
- (void)setAge:(int)newAge {
self.age = newAge;
}
@end
答:死循环
7,这段代码有什么问题,如何修改
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);
}
}
8,截取字符串”20 | http://www.baidu.com”中,”|”字符前面和后面的数据,分别输出它们。
NSString *string = @” 20 | http://www.baidu.com”;[string componentsSeparatedByString:@”|”];
9,用obj-c写一个冒泡排序
NSMutableArray *array = [NSMutableArray arrayWithArray:@[@"3",@"1",@"10",@"5",@"2",@"7",@"12",@"4",@"8"]];
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]) {
[array exchangeObjectAtIndex:j withObjectAtIndex:j + 1];
}
}
}
NSLog(@"%@", array);