iOS开发常见问题:
1、单元测试时,cocoaPods报错
platform :ios, '7.0'
pod "AFNetworking", "~> 2.0"
pods 文件原来是这样。
在用了xctest之后,就报错了:AFNetworking Cause Error while using XCTest in Xcode5。
要在中间加一句:
link_with 'Supermark', 'SupermarkTests'
2、xcode 的使用
-objc 的意思:
之所以使用该标志,和Objective-C的一个重要特性:类别(category)有关。根据这里的解释,Unix的标准静态库实现和Objective-C的动态特性之间有一些冲突:Objective-C没有为每个函数(或者方法)定义链接符号,它只为每个类创建链接符号。这样当在一个静态库中使用类别来扩展已有类的时候,链接器不知道如何把类原有的方法和类别中的方法整合起来,就会导致你调用类别中的方法时,出现"selector not recognized",也就是找不到方法定义的错误。为了解决这个问题,引入了-ObjC标志,它的作用就是将静态库中所有的和对象相关的文件都加载进来。
ios 全局包含的头文件
.pch
arc 和 非 arc 混用的时候:
如果是arc中使用非arc的,对不需要arc的文件添加: -fno-objc-arc。编译标示。
xcode的group如何与文件夹对应:(双击show in finder能直接显示该文件夹)
直接删除这个group,记得选reference,不要move to trash。
然后整个文件夹添加进来即可。
注意:这样文件夹里面的所有文件的编译选项需要重新设置,后期慎用这个功能。
3、UIKit - UILabel
warning:
Automatic Preferred Max Layout Width is not available on iOS versions prior to 8.0
UILabel 的 使用了 Preferred Max Layout Width 這個屬性造成 numberOfLines 屬性只要不是 1 就會造成這個警告
解决方案:
1升级到ios8以上
2把label的这个选项值修改为非默认值
4、UIViewController 生命周期
UIViewController的view是lazy loading的,当你访问其view属性的时候,它会从xib文件载入或者通过代码创建(覆盖loadView方法,自定义其view hierarchy),并返回view对象,如果要判断一个View Controller的view是否已经被加载需要通过其提供的isViewLoaded方法来判断。
view加载后viewDidLoad会被调用,这里可以进行一些数据的请求或加载,用来更新你的界面。
view将被加入view hierarchy中的时候viewWillAppear会被调用,view完成加入的时候viewDidAppear会被调用,同样当view将要从view hierarchy中移除的时候viewWillDisappear会被调用,完成移除的时候viewDidDisappear会被调用。
当内存紧张的时候,所有的UIViewController对象的didReceiveMemoryWarning会被调用,其默认实现是 如果当前viewController的view的superview是nil的话,则将view释放且viewDidUnload会被调用,viewDidUnload中你可以进行后继的内存清理工作(主要是界面元素的释放,当再次加载的时候需要重建)。
controller之间的关系:
其实显示或者旋转的回调的触发的源头来自于window,一个app首先有一个主window,初始化的时候需要给这个主window指定一个rootViewController,window会将显示相关的回调(viewWillAppear:, viewWillDisappear:, viewDidAppear:, or viewDidDisappear: )以及旋转相关的回调(willRotateToInterfaceOrientation:duration: ,willAnimateRotationToInterfaceOrientation:duration:, didRotateFromInterfaceOrientation:)传递给rootViewController。rootViewController需要再将这些callbacks的调用传递给它的Child View Controllers。
以上内容有部分来自互联网,侵权请联系我(留言、评论均可),马上删除。