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中实现下面两个方法,能够监听从后台恢复到前台
- - (void)applicationDidEnterBackground:(UIApplication *)application
- {
- log4info(@"---applicationDidEnterBackground----");
- //进入后台
- }
- - (void)applicationDidBecomeActive:(UIApplication *)application
- {
- NSLog(@"---applicationDidBecomeActive----");
- //进入前台
- }
但是单个UIViewController怎么监听呢
在-viewDidLoad方法中,添加一下代码监听notification
- [[NSNotificationCenter defaultCenter] addObserver:self
- selector:@selector(someMethod:)
- name:UIApplicationDidBecomeActiveNotification object:nil];
别忘了在-dealloc中将监听移除:
- [[NSNotificationCenter defaultCenter] removeObserver:self];
17.如果UIScrollView的内容位置发生偏移,比如UITextView里面的文字内容位置偏了,是automaticallyAdjustsScrollViewInsets这个属性引起的,将其设置为NO:
self.automaticallyAdjustsScrollViewInsets =NO;
但是automaticallyAdjustsScrollViewInsets并不是没卵用的,当其设置为YES,同时tableView是从页面最顶部开始的,这样tableView里的内容自动从导航栏下面开始,以实现一种被导航栏穿透的效果