美文网首页
ios - 开发经验总结

ios - 开发经验总结

作者: flowerflower | 来源:发表于2017-06-02 17:43 被阅读96次

    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 修饰

    相关文章

      网友评论

          本文标题:ios - 开发经验总结

          本文链接:https://www.haomeiwen.com/subject/lrfrattx.html