iOS tips

列出开发中常见bug,方便以后review

  1. Linker command failed with exit code 1 (use -v to see invocation) 由于link出现问题
  • 原因:submodule和pod同时存在,导致编译器不知道去哪个地方进行调用。解决方法:删除其中一个,个人建议删除submodule,然后用command+option+shift+k,删除所有已经build文件,然后重新build,因为更加简单。
  • 根据提醒,文件重复,原因是文件产生的文件名冲突,导致产生的.a之类的文件冲突。
  1. ImageNamed会进行缓存,不仅仅从Assets中读取,也从路径中读取,不需要加2x等后缀,contentOfFile:需要完整路径,需要加上2x后缀。
  2. 使用newView.layer.shouldRasterize = YES虽然使用栅栏化,但是因为栅栏化导致图片变得模糊,同时模糊的对象除了本身还有其包含的UIView的子类。所以最好的建议在大量使用圆角的时候,如果图片小,可以使用shouldRasterize,否则最好使用CAShapeLayer进行重新绘制。虽然还是会调用上下文,但是因为是用户设置好告诉系统需要调用,所以减少卡顿效果
  3. tableView & collectionView 的 cell 的size 都是通过计算获得,苹果方面禁止对 cell 直接使用使用 autolayout。
  4. cell 中的 imageView 的 superView 是 contentView ,而 contentView 的superView 才是 Cell。所以当内容插入的时候,需要将内容插入到 contentView 而不是直接插入到 cell 当中,否则在调试 UI 的过程中,控件的状态像是 存在于 Layer 上面一样。
  5. 对于懒加载的使用情况。主要是为了应对一个 VC 下面有多种的 View 的现实情况,而不同的 View 的出现概率不一定,所以为了节省空间而使用懒加载。
  • 缺点:但是因为懒加载重写了 getter 方法,如果在书写的过程中不按照规范书写,导致返回值发生变化。这样父类调用子类的情况可能没有问题,但是父类调用子类的子类,就可能会出现问题。
  • 需要注意:在只需要加载一次的情况下,就直接创建对象并赋值。
  1. 尽可能使用全称来进行描述变量,比如说:使用button而不是btn
  2. 对于pod 1.0以上版本在bundle内直接使用NSLocalizedString(arg1,arg2)可能会无法读取,所以取而代之用NSLocalizedStringFromTableInBundle(@"goback", nil, bundle, nil);进行获取相关内容的i18n
  3. 对于alias命令使用.bash_profile进行转化(对于单个用户),/etc/podfile 对全体用户进行转化。
  4. 对于不同类型的 asset 转换成 CGImage(图片质量从高到低分别是):
  • [UIImage imageWithCGImage:[[asset defaultRepresentation] fullResolutionImage]],直接获得原图,不经过相册自带修改的信息,非 PNG 格式
  • [UIImage imageWithCGImage:[[asset defaultRepresentation] fullScreenImage]],获得缩略图,经过相册自带修改信息的处理
    • [UIImage imageWithCGImage:[asset aspectRatioThumbnail]],获得分辨率约为 380 * 250 的图片
    • [UIImage imageWithCGImage:[asset thumbnail]] ,获得 125 * 125的缩略图。
  1. 对于正确使用ssh的添加方法:
  • ssh -T git@git.caimi-inc.com 对git进行测试判断是否正常
  • ssh-keygen -t rss -C “注释名“ 创建一个名字
    • 里面的创建的名字不需要使用路径名字,直接输入文件名即可
    • 创建完后加入最后ssh-add privateKeyName,然后上传即可
  1. podspace 的基本情况:通过 ruby 书写。明白了版本号的区别(语义化版本),详见网页地址

  2. 就算是系统内部的函数也存在循环引用的情况,[[NSNotificationCenter defaultCenter] addObserverForName:<#(nullable NSString *)#> object:<#(nullable id)#> queue:<#(nullable NSOperationQueue *)#> usingBlock:<#^(NSNotification * _Nonnull note)block#>] 方法因为返回一个observer对象会导致self,持有这个对象,从而导致环的出现。

  3. brew install imagemagick。图片转换,使用方法: convert -resize 50% sourcePath aimPath;

  4. 1
    2
    3
    4
    5
    6
    7
    dyld: Library not loaded: @rpath/XCTest.framework/XCTest**
    **  Referenced from: /Users/zkhcreator/Library/Developer/CoreSimulator/Devices/475FB229-B4DF-41AA-B3B9-263F47E7FEA2/data/Containers/Bundle/Application/6670C0B5-2E68-4F43-B0AD-5C78ABD3D78E/WacApp.app/WacApp**
    **  Reason: image not found**
    解决方法:在对应工程文件中Build Phases中高的Link Binary With Libraries中添加XCTest.framework,由于在这个工程文件中不存在对应内容,所以status设置为optional。