1.重写一个类用继承还是分类?
继承
2.GCD异步加载一张图片
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);
__block UIImage * image = nil;
dispatch_async(queue,^{
NSURL * url = [NSURL urlWithPath:@"xxx"];
NSData * data = [NSData dataWithContentsOfURL:url];
image = [UIImage imageWithData:data];
[self performSelectorOnMainThread:@selector(setImage:)withObject:image];
});
3.显式动画和隐式动画区别
显式动画是人为设置的,隐式动画是改变属性的时候自动生成。
显示动画的属性没有真正改变。
4.block使用注意事项
这个在第二篇有。
5.写一个@property(nonatomic,retain)nsstring * name的 set方法
注意点:不能用self,要使用下划线
6.单例的实现 略
7.
int a[5] = {1,2,3,4,5};
int *p = (int *)(&a+1);
printf("%d ,%d",*(a+1),*(p-1));
NSLog(@"%@",@"sd------");
&a+1 加了一个数组 偏移了整个数组的大小
8.老板 前台 员工 老板告诉前台 让前台通知5点开会 谁是观察者?
前台
9.tableview优化
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
一般情况下我们都是在这里进行操作的。该代理方法可以多次执行重复绘制界面。所以绝大部分人都会在这里做一些代码处理
static NSString *CellIdentifier = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
然后加上判断。
但是如果cell内容很多,那么就涉及到性能的问题,还有网络不好的时候下滑会出现卡顿现象。
怎么做?异步加载?但是每一个都加上异步加载的话,如果线程过多还是会卡顿。特别是在下滑的时候。
于是可以利用父类scrollview代理方法处理这个问题。
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
可以识别tableview禁止或者减速滑动结束的时候进行异步加载图片
//获取可见部分的对象
NSArray *visiblePaths = [self.tableView indexPathsForVisibleRows];
for (NSIndexPath *indexPath in visiblePaths)
{
//获取的dataSource里面的对象,并且判断加载完成的不需要再次异步加载
<code>
}
同时在cell绘制中也做限制
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
if (self.tableView.dragging == NO && self.tableView.decelerating == NO)
{
//开始异步加载图片
<code>
}
如果tableview 停止滑动的时候开始异步加载图片
最后也别忘记在内存紧张的情况下释放调所有的异步线程,以保证的你的app不会被系统强制关闭
- (void)didReceiveMemoryWarning{
// 释放调异步加载图片的线程以及所有图片资源对象
<code>
}
还有千万别忘记销毁的时候手动把所有的使用到的代理设置nil
第二点,图片需要缓存机制。
10.MKNetWorking AFNetWorking ASI基于什么写的?简述多个网络请求处理
留坑