iOS开发指南iOS基础知识点iOS开发知识小集

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

2017-04-17  本文已影响1053人  Lol刀妹
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];
上一篇下一篇

猜你喜欢

热点阅读