IOS开发小记

最近老师想要给一个去中心链的IM开发几个功能,安卓端有人做,但我们实验室没人开发过IOS,老师想起我面试的时候提到过我大二做过IOS开发,就让我这个月搞出来,然后…

不愧是世界上最难用的IDE,回想起了大二被XCODE支配的恐惧

因为当时没用pods管理第三方库…以下踩坑记录

  1. 使用CocoaPod管理依赖的项目,XCode只能使用workspace编译项目,如果还只打开以前的xcodeproj文件进行开发,编译会失败。新增的workspace文件会引用原有的应用主工程,还会引用新增的Pods工程

  2. 如果 PODS生成的静态链接库没有被主工程target链接,要自己手动建立链接

  3. 在头文件搜索路径里 xxx/xxx/ re… 别忘了加\并设置迭代搜索

  4. build后修改代码,需要build clean再重新build,不然会报上次一样的错

  5. 要检查头文件路径是否正确,或者直接写”.h”,则xcode会直接在头文件搜索路径里搜索

  6. mac自带的ruby权限较小,开发不要用这个。我们要自己安装rvm并创建ruby环境,随后我们的cocoapods是在这个环境使用的

  7. respondsToSelector 用来判断某一个方法时候实现

    1
    2
    3
    4
    5
    #如果destroy这个方法实现了,就执行之
    if ([subViewController respondsToSelector:@selector(destroy)])
    {
    [subViewController destroy];
    }
  8. UINavigationController 导航控制器

    开发的时候一般都是多控制器,由一个父控制器管理多个子控制器

    一般都是在Appdelegate中生成(可以将Nav写在一个VC中,然后在Appdelegate中实例化这个VC)

    使用方法:

    • 初始化UINavigationController实例

    • 在AppDelegate中设置一个根控制器,即设置self.window.rootViewController=UINavigationController(在AppDelegate中设置,self指的appdelegate)

    • 通过push方法添加需要的子控制器

      在初始化UINavagationController的时候调用构造方法initWithRootViewController:就会自动push自己设定的根控制器,但其它view就要创建后手动push

    当前view所属控制器self.navigationController

    控制器跳转:[self.navigationController pushViewController:xxxViewController animated:YES]

    压入(push)控制器:-(void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated;

    移除(pop)栈顶控制器:-(UIViewController *)popViewControllerAnimated:(BOOL)animated;即可返回上一层控制器

    回到(popTo)指定子控制器:-(NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;

    回到根(popToRoot)控制器(栈底):-(NSArray *)popToRootViewControllerAnimated:(BOOL)Animated;

    一次压入多个控制器setViewController

    栈顶控制器nav.topViewController

    当前可见视图控制器nav.visibleViewController

  9. ViewController相关

    根据名字获取VC:_homeViewController = self.viewControllers[TABBAR_HOME_INDEX];

  10. 账户登入状态等信息可以用单例模式来管理

  11. AppDelegate负责管理程序周期,是程序入口

    -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

    这里就是程序launch完后做的事情,这时候就可以初始化Root VC了

  12. 协议 接口 委托

    委托:A委托B去做某事,B如果没有这个方法,B从C继承,C有这个方法,就会执行C中的该方法(与java一样的向上转型)

    • A是B的委托对象
    • B引用一个A
    • A将实现B的委托方法
    • B通过委托方法通知

    接口:接口就相当于一个头文件,告诉外部可以用,联想生物细胞的构造

    在h文件里写@interfacae,在m文件里实现该interface,就相当于建立了一个类,只有interface暴露的东西才能被外部使用,这种设计是为了更好的安全性

    java类和oc类的核心区别在于,java类的共有私用是由类里面自己实现的,可以设置共私有变量和方法,而OC中每个类都是由一个接口interface和实现该interface的类来完成,只有interface中的东西暴露给了外部

     协议:协议可以类比java中的interface
    
  13. Universal Link, 中文是通用链接. 可以通过http(s)来唤醒App

  14. prepareForSegue:sender:

    为了区分视图的跳转,可以用上一个、下一个来表示,也可以用源视图、目标视图来表示。 即: sourceViewController 和destinationViewController。 目标视图控制器是指:即将显示(加载)的视图, 而源视图控制器是指:即将被取代的视图控制器。

  15. 跳转总结

    https://www.jianshu.com/p/ceaf978f9dfe