2.判断if书写方式
建议这样写
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
if (indexPath.row == 0) return 10;
if (indexPath.row == 1) return 20;
if (indexPath.row == 2) return 30;
return 40;
}
而不是
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
if (indexPath.row == 0) {
return 10;
}else if (indexPath.row == 1){
return 20;
}else if (indexPath.row == 2){
return 30;
}else{
return 40;
}
}
4.类型输出
类型 | 定义 |
---|---|
NSInteger | %ld or %lx |
NSUInteger | %lu or %lx |
CGFloat | %f or %g |
CFIndex | %ld or %lx |
pointer | %p |
long long | %lld or %llx |
unsigned long long | %llu or %llx |
6.UIView不能接收触摸事件的4种情况:
1>不接收用户交互userInteractionEnabled = NO;比如UIImageView,UILabel;
2>隐藏hidden =YES;
3>透明alpha<0.01;
4>点击的point在View范围之内,但是View的范围超出了superView,同时view的父类的clipsToBounds属性值为NO
注意:UIImageView的userInteractionEnabled 的默认就是NO,因此UIImageView以及它的子控件默认是不能接收触摸事件的
例如:不是按钮就一定有反应的,要看其父控件是谁.若按钮的父控件是ImgView 要是想要bth有响应的话,需要把imgView.userInteractionEnabled = YES;这样按钮就有反应了
8.代理使用weak还是assign?
weak: 他会把后面的东西当成一个对象,没有指针指向的时候会将其释放掉
assign:基本数据类型
在非ARC环境里面设置代理对象可以用assign
在ARC环境中设置代理对象要用weak(如果该对象没有指针指向它,会自动将该对象释放,即自动执行delegate = nil),如果用assign可能会出现野指针,但是可以用delegate = nil来进行释放;建议使用weak安全一点
self.strongPoint = [NSDate date];
self.weakPoint = self.strongPoint;
self.assignPoint = self.strongPoint;
把strongPoint释放后,按常理 weakPoint与assignPoint应该也为空,但实际上assignPoint指向的对象释放了,他自己指向了一个不存在的区域,野指针,需要附加一句 assignPoint = nil; 才可以.
self.strongPoint = nil; //将strongPoint释放了
//下面这一行会引起程序崩溃(有时候不崩溃,需要多运行几次
这是因为当 assign 指针所指向的内存被释放(释放并不等于抹除,只是引用计数为0),不会自动赋值 nil ,这样再引用 self.assignPoint 就会导致野指针操作,如果这个操作发生时内存还没有改变内容,依旧可以输出正确的结果,而如果发生时内存内容被改变了,就会crash
NSLog(@"assignRefrence:%@", self.assignPoint);
结论证明:在 ARC 环境下编程时,指针变量一定要用 weak 修饰,只是基本数据类型和结构体需要用 assign ,例如 delegate ,一定要用 weak 修饰
网友评论