首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Iphone >

iPhone开发常见的异常

2012-07-01 
iPhone开发常见的错误? 开始iPhone的Practise Project,其中有很多的问题,先记录起来,以免以后再犯:??? ? ?

iPhone开发常见的错误

? 开始iPhone的Practise Project,其中有很多的问题,先记录起来,以免以后再犯:

?

?? ? ?1. ?EXC_BAD_ACCESS:

?? ? ?发生场景1:一个指针转了两次,release了两次,其实只要release一次就可以。或者用指针时避免到处赋值。

?? ? ?发生场景2:在一个View Controller A里动态加载另外一个View Controller B, B中无法使用UITableViewDelegate。

?

?? ? 2. ?Debug里出现一批Leaking的警告错误:

?? ? 发生场景:使用了NSThread造成的。如下调用:

?? ?[NSThread?detachNewThreadSelector:@selector(scheduleTask)?toTarget:self?withObject:nil];?

?? ? ?那么在-(void) scheduleTask;中比如加入pool管理,即可防止出现此类错误:

?? ? ?-(void) scheduleTask {

? ? ??//create a pool?

?? ???NSAutoreleasePool?*pool = [[NSAutoreleasePool?alloc]?init];

?? ? ? ? //...your code write here.?

?? ???//release the pool;

? ? ??[pool?release];

?? ? ??}

?

?? ? 3. 在非主线程中,不要干创建UIView之类的活,而应该放到主线程去做,可以在非主线程里做UIView的显示更新等操作。

?

?? ? 4. 循环读取数据到数组时,请不要用以下方式(会报Leaks):

while?(sqlite3_step(statment)?==?SQLITE_ROW)?{
?? ? ? ? ? ?City?*city??=?[[City?alloc]?init];
???????????//取值

???????????[citys?addObject:city];

????????????[city?release];
????????????city?=?nil;

?

?? 而应该用如下方式:

?City?*city;

while?(sqlite3_step(statment)?==?SQLITE_ROW)?{
????????????city??=?[[City?alloc]?init];

???????????//取值

???????????[citys?addObject:city];

????????????[city?release];
????????????city?=?nil;

?

?? ?5. Xcode 项目连上SCM后,提交时出现“125001 bogus filename ” 错误,什么path含有'.',目前尚未解决。

?

?? ?6. 数据里定义一个实体对象,不能直接取这个对象的某个属性。

?

?? ?7.当用以下代码跳转View的时候,在跳转的Controller里需要屏蔽initWithNibName 方法,否则View无法显示。

?iPhone开发常见的异常代码

?

?? ?8. 用sqlite时,出现Undefined symbols: “_sqlite3_free”, referenced from: ,?类似错误,后查询发现,忘了把把sqlite的库文件引用来项目里。

?? ?9. 关于超时:当用如下方式设置request的timeout时,发现根本不起作用,timeout依然是默认的240秒。碰到这类问题,可用NSTimer来控制是否超时,然后进行处理。

?NSMutableURLRequest?*request = [[NSMutableURLRequest?alloc]?initWithURL:[NSURL?URLWithString:URI]cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData?timeoutInterval:5.0f];?

?

?? ?10.代码检查:

If you're using xCode 3.2 and above in the build menu you can just select build & analyze, and it will give you the results in the build results.?

?

?? ?11. UITableView中,实现该方法时注意- (UITableViewCell?*)tableView:(UITableView?*)tableView?

?? ? ? ? cellForRowAtIndexPath:(NSIndexPath?*)indexPath

?? ? ? ? ??如果cell里有新添加的控件,只需要在第一次添加,每次滚动时改变控件里的显示值即可。

如:iPhone开发常见的异常代码

?

?? 12. 在tableView的Cell中使用自定义的View时,如果tableView有删除新增动作时,table row的内容会显示混乱。

?

?? 13. 在UIViewController里添加子UIViewController时,不需要子UIViewController进行释放。 当把子View移除时,第一次会调用dealloc,此后每次add,remove都不再调用dealloc。估计是ios的缓存。

?

?? 14. UITableView为group类型时,要想收缩或者展开某一个section,需用一个取巧的方式,比如设置section的高度,然后再reload section。网上用beginEdit,和endEdit来实现,不过整个tableview都会刷新,感觉用户体验不太好。

?

?

原文引用:http://www.cnblogs.com/KiloNet/archive/2010/08/12/1798324.html

热点排行