- 描述应用程序的启动顺序
(1) 程序进入main函数创建UIApplication实例和UIApplication代理实例
(2)在UIApplication代理实例中重写启动方式,设置根视图ViewController
(3)在第一个ViewController中添加控件,实现应用程序界面
2 为什么很多内置类如UITableViewControl的delegate属性都是assign而不是retain?请举例说明。
-
因为retain会导致循环索引导致内存泄露,
并且此类型的内存泄露无法被Instrument发现,极难调试
比如 :对象A创建并引用对象B,对象B创建并引用对象C,对象C创建并引用到对象B ,这个时候对象B的引用计数是2 ,而C的引用计数是1,当A不用B的时候,释放B的所有权,这个时候C还引用B所以B不会释放,引用计数为1;因为B也引用着对象C,B不释放,那么C就不释放,所以他们的引用计数都为1,并且永远不会被释放,所以形成了循环引用
3 使用UITableView时候必须要实现的几种方法
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView;
4 写一个便利构造器方法
+ (id)studentWithName:(NSString *)name andAge:(NSInter)age{
Student *student = [[Student alloc]initWithName:name andAge:age];
return [student autorelease];
}
5 UIImage初始化一张图片有几种方法?简述各自的优缺点。
1 imageNamed 是UIImage的类方法 系统先检查缓存中是否存在该名字的图片,如果存在直接返回,如果系统缓存中不存在该名字的图像,则会先加载到缓存,再返回对象
这种机制试用于那种频繁用到界面贴图的加载,若在短时间内频繁加载一些一次性的图像的话,最好不要使用这种方法
2 imageWithContentsOfFile 和intWithContentsOfFile 方法 与前一个方法相同都是从文件系统加载图像,但是不会经过系统缓存,直接加载并返回
3 imageWithCGImage:scale:orientation方法 该方法使用CGImage创建image,在创建的时候可以指定图片与原尺寸的倍数(scale参数)orientation指定新的图像的绘制方向