ios开发极易犯的错误

1.NSMutableArray一定分配内存才能使用,至少要[[NSMutableArray alloc] init],统一放在- (id)init中实现;

2.特殊结构的数组可以通过malloc来分配内存,不可以直接array[10],这种写法是错误的

e.g: a)创建一个CLLocationCoordinate2D型数组可以通过以下方式:CLLocationCoordinate2D *coord = malloc(sizeof(CLLocationCoordinate2D ) * count);//count是数组里成员的个数.

b)再如创建一个MKMapPoint型数组,MKMapPoint* pointArray = malloc(sizeof(CLLocationCoordinate2D) * _points.count);

3.不能直接把int,float,double,bool,NSInteger,直接加到NSDictionary里面,要用NSNumber包装一下,如[NSNumber numberWithInt:3],因为这些int,float只是基本型数据,不是对象,NSNumber ,NSString都已经属于对象.

4.写函数先考虑为空情况,加新必先除旧

5.self.navigationController.navigationBar.translucent 若为默认(YES),则页面其他控件的垂直方向起点以屏幕的起点为起点,;若为NO,以导航栏最下端为起点。

6.将计数器的repeats设置为YES的时候,self的引用计数会加1。因此可能会导致self(即viewController)不能release,所以,必须在viewWillAppear的时候,将计数器timer停止,否则可能会导致内存泄露。

7.让地图兼容ios8:在info.plist添加NSLocationWhenInUseUsageDescription,NSLocationAlwaysUsageDescription

8.xib的file's Owner 一定要设置其custom class,不然无法连接

9.隐藏导航栏返回按钮的方法: [self.navigationItem.backBarButtonItem setTitle:@""]; [self.navigationItem setHidesBackButton:YES];

10.NSURL的url中不能有中文字符和空格,需要如下转换:

string = [string stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

一些特殊字符可以使用CFURLCreateStringByteAddingPercentEscapes

11@""创建的NSString兼容性比较差,如果是用在网址里,一定要用[NSString stringWithFormat:@""]进行封装。

12.UITableView消除重影的方法,在cellForRowAtIndexPath方法中这样定义

if(!cell){

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier];

}else{

NSArray *subviews = [[NSArray alloc] initWithArray:cell.contentView.subviews];
        for (UIView *subview in subviews) {
            [subview removeFromSuperview];
        }
        [subviews release];

}

//定义cell的内容

13.如果自定义searchbar,绝不用系统的,直接自己定义UITextfield

14.[[UIScrollViewalloc]initWithFrame:CGRectMake(x,y, 320,500)];如果y不是0,那么scrollView就会多出一块区域,由于其实的y不是0,所以最好的为0;或者scrollView不要在viewDidLoad创建,而在ViewDidAppear

15.layoutSubviews在以下情况下会被调用:

a、init初始化不会触发layoutSubviews
b、addSubview会触发layoutSubviews
c、设置view的Frame会触发layoutSubviews,当然前提是frame的值设置前后发生了变化
d、滚动一个UIScrollView会触发layoutSubviews
e、旋转Screen会触发父UIView上的layoutSubviews事件
f、改变一个UIView大小的时候也会触发父UIView上的layoutSubviews事件

16.监听app从后台恢复到前台

正常情况下,在AppDelegate中实现下面两个方法,能够监听从后台恢复到前台

  1. - (void)applicationDidEnterBackground:(UIApplication *)application  
  2. {  
  3.     log4info(@"---applicationDidEnterBackground----");  
  4.    //进入后台  
  5. }  
  6.   
  7. - (void)applicationDidBecomeActive:(UIApplication *)application  
  8. {  
  9.   
  10.     NSLog(@"---applicationDidBecomeActive----");  
  11.     //进入前台  
  12.   
  13.       
  14. }  



但是单个UIViewController怎么监听呢

在-viewDidLoad方法中,添加一下代码监听notification

  1. [[NSNotificationCenter defaultCenter] addObserver:self  
  2.                                          selector:@selector(someMethod:)  
  3.                                              name:UIApplicationDidBecomeActiveNotification object:nil];  

别忘了在-dealloc中将监听移除:

  1. [[NSNotificationCenter defaultCenter] removeObserver:self]; 

17.如果UIScrollView的内容位置发生偏移,比如UITextView里面的文字内容位置偏了,是automaticallyAdjustsScrollViewInsets这个属性引起的,将其设置为NO:

self.automaticallyAdjustsScrollViewInsets =NO;
但是automaticallyAdjustsScrollViewInsets并不是没卵用的,当其设置为YES,同时tableView是从页面最顶部开始的,这样tableView里的内容自动从导航栏下面开始,以实现一种被导航栏穿透的效果


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值