美文网首页iOS开发指南iOS基础知识点iOS开发知识小集
iOS开发 | 实用技能&小知识点(持续更新)

iOS开发 | 实用技能&小知识点(持续更新)

作者: Lol刀妹 | 来源:发表于2017-04-17 16:19 被阅读1053次
    iu

    1.切换debug和release模式


    2. 相当于VVDocument插件的注释快捷键

    快捷键:cmd+alt+/
    效果:

    3. 查看当前视图控制器的类名

    使用符号断点,详情:http://www.jianshu.com/p/ef05d90979cf

    4. 查看某个控件的类名

    打开Debug View Hierarchy,点击你想查看类名的控件


    5. 一秒打包

    将products文件夹中的.app文件直接拖到iTunes,然后再拖出来


    将这个文件拖到iTunes
    在finder中显示
    这个就是我们打包好的IPA文件

    6. 从一个UIViewController跳转到一个UINavigationController

    /** 跳转到主页 */
    - (void)gotoMainVC{
        Xhany *mainVC = [[Xhany alloc] initWithNibName:nil bundle:nil];
        UINavigationController *mainNavi = [[UINavigationController alloc]initWithRootViewController:mainVC];
        [self presentViewController:mainNavi animated:YES completion:^{
            [UIApplication sharedApplication].keyWindow.rootViewController = mainNavi;
        }];
    }
    

    7. 快速查看Xcode自带的文档

    离线文档,没网也可查看。快捷键:shift+cmd+数字0,遇到没见过的方法,先去文档里查看,多看文档少扯蛋

    8. 让UILabel高度自适应内容

    调用sizeToFit即可

    9. 将button的image调小

        // 调整图片到上左下右边距的距离
        leftButton.imageEdgeInsets = UIEdgeInsetsMake(0, 40, 0, 40);
    

    10. 人人都可以轻松搭建内测平台

    蒲公英,蒲公英除了方便开发者和测试妹儿,也方便了产品了解开发进度,甚至,如果只是公司内部人员使用此APP,无需发布到App Store,直接将指定设备的UDID加入,然后把链接发出去即可。

    11. 白天上架,轻松愉快(经验而已)

    记得用ApplicationLoader哦😯

    12. UITextField的placeHolder也可以是富文本

    其实是attributedPlaceholder

    self.inputPasswordTextField.attributedPlaceholder = attributeText;
    

    13. 判断label当前有几行

        UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(90, 90, 80, 100)];
        [self.view addSubview:label];
        label.text = @"33431dfadfdafadsfasfsdf";
        label.numberOfLines = 0;
        label.font = [UIFont systemFontOfSize:13];
        
        NSDictionary *attrs = @{NSFontAttributeName : [UIFont systemFontOfSize:13]};
        // 总高度
        CGFloat totalHeight = [label.text  boundingRectWithSize:label.frame.size options:NSStringDrawingUsesLineFragmentOrigin attributes:attrs context:nil].size.height;
        // 每行文字的高度
        CGFloat lineHeight = label.font.lineHeight;
        // 行数 = 总高度除以每行高度
        NSInteger lineCount = totalHeight / lineHeight;
        NSLog(@"lineCount:%ld",lineCount);
    

    14. 返回码所代表的含义

    HTTP协议状态码表示的意思主要分为五类 ,大体是 :
    ——————————————-
    1××   保留
    2××   表示请求成功地接收
    3××   为完成请求客户需进一步细化请求
    4××   客户错误
    5××   服务器错误

    15. 最强大的编程技术问答网站

    Stack Overflow
    如果在这里都解决不了的问题,那么通常都是你提问的方式有问题。

    16. 在.h和.m文件快速切换的快捷键

    ctrl+cmd+方向键上或下

    17. 判断控件里的image的名称是不是xx

        if ([imageView.image isEqual:[UIImage imageNamed:@"iu"]]) {
            NSLog(@"一样");
        }else{
            NSLog(@"不一样");
        }
    

    18. 加了全局异常断点,程序还是崩溃在main函数怎么定位bug?

    勾选Zombie Objects即可


    19. 生命周期方法可以主动调用,如:

    [self viewWillAppear:YES];
    不过感觉这种写法有点小小的蛋疼😌

    20. 在控制台中使用git,红色表示没有add,绿色表示没有commit。

    21. APP显示角标

    [UIApplication sharedApplication].applicationIconBadgeNumber = _orderNum;

    22.判断是否是debug模式

    #ifdef DEBUG
        // 如果是debug模式
        NSLog(@"debug");
    #else
        // 如果不是debug模式
        NSLog(@"非debug");
    #endif
    
    

    23.三元不要嵌套三元

    我们用三元是为了让代码更简洁,但是如果三元嵌套三元就影响可读性了(如果真要嵌套,请先确保可读性)。

    24.对于后台返回的浮点型要谨慎

    由于浮点数的存储是不精确存储,所以对于敏感信息如价钱价格最好不要让后台返回float型,一般返回int型或string型。当然对于像经纬度这种不是特别敏感的,返回float型也可以。

    25.函数和方法的区别

    26.开发者账号到期了会怎样?

    你的APP会从App Store里消失,等你给账号充值后又会重新出现。(苹果会在到期30天前提醒你,喊你交钱,不交钱让你好看 )

    27.如何查看开发者账号的过期时间?

    28.证书被吊销了怎么办?

    查看

    29.想看APP的内存使用情况,但是显示却是0怎么办?


    在EditScheme中将Zombie Objects去掉,重新运行即可


    30.保管好DSYM文件

    为了方便找回Crash对应的dSYM文件和还原堆栈,建议每次构建或者发布APP版本的时候,备份好dSYM文件。(dsym文件的作用是:配合crash监控平台如腾讯bugly定位线上APP崩溃的代码位置)

    31.push到新页面,顶部空出20像素

    解决方法:self.automaticallyAdjustsScrollViewInsets = NO;

    32.imageView设置了图片但是未展示

    可能你项目中有重复命名的图片。修改过后记得clean。

    33.Xcode编译报错却可以继续运行

    可能你项目中有重复命名的图片。修改过后记得clean。

    34.清理Xcode编译项目产生的缓存垃圾

    手动删除:
    打开菜单的前往->前往文件夹输入—> ~/Library/Developer/Xcode/DerivedData

    35.删除Xcode中多余的provisioning profile

    手动删除:
    打开菜单的前往->前往文件夹输入—> ~/Library/MobileDevice/Provisioning Profiles

    36. UIButton的setImage和setBackgroundImage的区别

    setBackgroundImage的imageView和button一样大,并且不能通过imageEdgeInsets来调整imageView的大小。使用setImage可以随意调整按钮图片大小。

    37.遍历加强版(for in加强版,能获取索引的遍历)

        NSArray *arr = @[@1,@2,@3,@4,@5];
        [arr enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            NSLog(@"对象==%@",obj);
            NSLog(@"下标==%ld",idx);
            if ([obj integerValue] == 3) {
                // 遍历到3时结束
                NSLog(@"结束");
                *stop = YES;
            }
        }];
    

    38.获取masonry布局控件的frame

    调用其父控件的layoutIfNeeded方法。

    39.真机调试崩溃,但是未抛出任何错误并且Xcode直接结束run。

    很可能是内存爆炸导致的。详情:ios app crashes with no error and no crash report

    40.用谷歌别用百度。

    真的,谁用谁知道。。。

    41.让timer不因scrollView的滚动而停止

    [[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
    

    42.NSTimer可以设置的最小时间间隔是0.01s

    具体数字无从核实,然后我去问了一下:
    What's the min timeInterval of NSTimer is valid?

    43.使用通知注意移除,不然在iOS8可能崩溃。

    一般在对称方法里移除,如:在init:方法里添加,就在dealloc方法里移除;在viewWillAppear:添加,就在viewWillDisappear:里移除。

    听说使用RAC无需移除通知,可以尝试下哦。

    44.使用timer不要忘了及时释放

    一定要有这个意识:看到timer就条件反射的提醒自己千万别忘了释放。

    45.APPStore里的展示图若无特殊要求,设置一套5.5的即可

    详情:AppStore截图尺寸要求、更换全攻略!(iphone ipad)

    45.抓包HTTPS

    可以参考这篇文章,亲测完美抓取:
    Charles iOS抓包Https,iOS最新系统抓包

    46.如何快速获取一张网络图片的URL?

    在图片上右击-->拷贝图像地址即可:


    47.如何应对后台返回的null?

    将null转为nil,可以使用这个三方:
    NullSafe

    48.属性和实例变量的区别

    属性 = 实例变量 + get方法 + set方法

    49.使用APP时手机发热严重

    仔细查看是那个操作让你的CPU暴涨,看你的代码里面是否有死循环。


    CPU如果一直这么高肯定是有问题的

    50.使用CABasicAnimation,按home键后再切回来动画停止的解决方法:

    设置animation.removedOnCompletion = NO;

    51.imageWithContentsOfFile方法不能加载Assets.xcassets里的图片

    谨记

    52.imageNamed和imageWithContentsOfFile的区别

    imageNamed会将图片cache到内存。

    53.RAC在iOS9上正常,在iOS8上崩溃

    what is the reason of this error -[UIButton rac_signalForControlEvents:]: unrecognized selector sent to instance

    54.执行了视图控制器的dealloc但是instrument显示存在内存泄漏

    dealloc 执行只能保证本对象里面没有存在的内存泄漏点,但是不保证本对象所持有的其他对象,以及其他对象所持有的其他对象没有内存泄漏,
    要保证没有内存泄漏,要保证所有对象的dealloc 都要执行 (来自Cocoa China 版主的回答)

    55.archive失败,并提示error: Invalid bitcode version (Producer: '800.0.35.0_0' Reader: '703.0.31_0')

    将Enable Bitcode 设为 NO.

    56.三目还可以这样写

    NSString *a = nil;
    NSString *b = a ?: @"222";
    

    这时b的值是222.

    57.UIView动画期间view的用户交互是关闭的

    During an animation, user interactions are temporarily disabled for the views being animated. (Prior to iOS 5, user interactions are disabled for the entire application.)
    

    58.让UIButton按下时颜色不变

    button.adjustsImageWhenHighlighted = NO;
    

    59.同时重写getter和setter

    @synthesize name = _name;
    
    - (NSString *)name {
        NSLog(@"调用了getter");
        return @"jack";
    }
    
    - (void)setName:(NSString *)name {
        NSLog(@"调用了setter");
        _name = name;
    }
    
    

    60.view的默认tag为0

    这就是为什么循环创建view时tag不从0开始的原因。

    61.关闭键盘的自动纠错功能

    有时我们并不需要自动纠错,可以使用:

    self.textField.autocorrectionType = UITextAutocorrectionTypeNo;
    

    62.多个UITextField时关闭键盘

    没必要对每个textfield都使用resignFirstResponder,可以调用:

    [self.view endEditing:YES];
    

    相关文章

      网友评论

        本文标题:iOS开发 | 实用技能&小知识点(持续更新)

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