iOS笔记-一些零散的知识点

作者: Developer_Yancy | 来源:发表于2016-04-07 22:47 被阅读684次

info.plist文件

  • 1.Bundle name : app名称,项目通常使用英文,app名称显示中文

  • 2.Bundle identifier : app标识符 上传AppStore和推送

  • 3.Bundle versions string, short app版本号

PCH文件

pch作用:

  • 1.存放一些公用的宏

  • 2.存放一些公用的头文件

  • 3.自定义Log

// 程序在调试阶段的时候才需要打印
// ...表示宏里面的可变参数
// __VA_ARGS__表示函数里面的可变参数

#ifdef DEBUG // 表示当前调试阶段

#define CYXLog(...)   NSLog(__VA_ARGS__)

#else // 发布阶段

#define CYXLog(...)

#endif
  • pch原理:就是把pch文件中的所有内容拷贝到所有文件的头部

  • 注意点:

    • pch文件一定要注意做些判断,判断下当前是否是OC文件,如果是就 导入OC的代码

所有的OC文件都会定义__OBJC__这个宏,苹果官方定义

  • 和C混编:注意点:判断单下是否是OC文件
#ifdef __OBJC__

// 放OC

#endif
// 判断系统的版本号
#define iOS8  ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0)
#define iPhone5 ([UIScreen mainScreen].bounds.size.height == 568)

UIApplication

  • 常识

    • UIApplication对象是应用程序的象征
    • 每一个应用都有自己的UIApplication对象,而且是单例
    • 通过[UIApplication sharedApplication]可以获得这个单例对象
    • 一个iOS程序启动后创建的第一个对象就是UIApplication对象
  • 利用UIApplication对象,能进行一些应用级别的操作

    • 1.应用程序图片的提醒数字

    • 2.联网状态

    • 3.设置状态栏

    • 4.打开资源,电话,网页,发短信

  • 何为单例

    • 1.整个应用程序只有一份内存.

    • 2.重写alloc方法,只分配一次.

    • 3.提供share方法,获取单例对象.

    • 4.使用静态全局变量保存单例对象.

  • 示例代码(模仿系统UIApplication 写一个单例Person

    • 模仿系统单例UIApplication特征:
      • 1.程序一启动的时候,苹果就会帮你创建UIApplication
      • 2.你如果调用alloc,系统马上抛异常
#import "Person.h"
// 1.程序一启动的时候就创建这个类的对象
// 2.不允许外界通过alloc分配内存,只要一调用,马上抛异常

@implementation Person

// 人的实例
static Person *_instance;

// 程序运行的时候就会加载类
+ (void)load
{
    _instance = [[self alloc] init];
}
// exception 'NSInternalInconsistencyException', reason: 'There can only be one UIApplication instance.'
+ (instancetype)alloc
{
    if (_instance) {
        // 崩溃
        // 创建异常对象
        NSException *excption = [NSException exceptionWithName:@"NSInternalInconsistencyException" reason:@"There can only be one Person instance." userInfo:nil];
        // 抛异常
        [excption raise];
    }
    // super -> [NSObject alloc]
    return [super alloc];
}
+ (instancetype)sharedPerson
{
    return _instance;
}
@end

UIApplicationDelegate

  • 常识

    • 1.在app受到干扰时,会产生一些系统事件,这时UIApplication会通知它的delegate对象,让delegate代理来处理这些系统事件

    • 2.delegate可处理的事件包括:

      • 2.1应用程序的生命周期事件(如程序启动和关闭)

      • 2.2系统事件(如来电)

      • 2.3内存警告

// 应用程序的生命周期
// 应用程序启动完成的时候调用
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    return YES;
}

// 当我们应用程序即将失去焦点的时候调用
- (void)applicationWillResignActive:(UIApplication *)application {
}

// 当我们应用程序完全进入后台的时候调用
- (void)applicationDidEnterBackground:(UIApplication *)application{
}

// 当我们应用程序即将进入前台的时候调用
- (void)applicationWillEnterForeground:(UIApplication *)application {

// 当我们应用程序完全获取焦点的时候调用
// 只有当一个应用程序完全获取到焦点,才能与用户交互.
- (void)applicationDidBecomeActive:(UIApplication *)application {
}

// 当我们应用程序即将关闭的时候调用
- (void)applicationWillTerminate:(UIApplication *)application {
}

@end

程序启动原理

  • 一.首先找到程序入口,执行main函数

    • main -> UIApplicationMain
  • 二.UIApplicationMain底层做的事情

    • 1.创建UIApplication对象

    • 2.创建UIApplication的代理对象,而且给UIApplication对象代理属性赋值

    • 3.开启主运行循环,作用接收事件,让程序一直运行

    • 4.加载info.plist,判断下有木有指定main.storyboard,如果指定就会去加载

  • 三.函数介绍:

    • NSStringFromClass:根据一个类名生成一个类名字符串

    • NSClassFromString: 根据一个类名字符串生成一个类名

  • 四.为什么使用NSStringFromClass

    • NSStringFromClass:输入类名有提示,避免输入错误

int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

UIWindow

  • 什么时候创建

    • 1.加载info.plist,判断有没有指定main.storyboard,指定了main.storyboard,就会去加载main.storyboard,执行main.storyboard的时候创建.
  • main.storyboard步骤

    • 2.1创建窗口
    • 2.2加载控制器
    • 2.3设置窗口的根控制器,显示窗口
  • 手动创建窗口

    • 1.什么时候创建?

      • 1.1 在加载info.plist文件之后,程序启动才完成,启动完成之后,就要显示窗口,因此在程序启动完成的时候创建窗口.
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // 窗口显示的注意点:
    // 1.一定要强引用
    // 2.控件要想显示出来,必须要有尺寸

    // 1.创建窗口
    self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];

    // 2.创建根控制器,在设置窗口的根控制器
    UIViewController *vc = [[UIViewController alloc] init];

    // 设置窗口的根控制器,底层会自动把根控制器的view添加到窗口上,并且让控制器的view有旋转功能
    self.window.rootViewController = vc;

    // 3.显示窗口
    // makeKeyAndVisible:让窗口成为应用程序的主窗口,并且显示窗口
    [self.window makeKeyAndVisible];

    return YES;
}
  • 窗口补充

    • 1.应用程序中那些控件属于窗口,1.状态栏 2.键盘

    • 2.窗口层级关系
      UIWindowLevelAlert > UIWindowLevelStatusBar > UIWindowLevelNormal
      设置窗口的层级,层级谁大就显示在最外面

    • 3.UITextField显示键盘

      • 注意点: 如果一个键盘想要弹出来,必须把textField添加到一个控件上.
  • addSubViewrootViewController的区别
    • 1> 直接用addSubView,控制器会被释放,控制器就不能处理事件
    • 2>直接用addSubView,控制器的view不会自动旋转。
    • 3> 用rootViewController,控制器不会被释放,而且控制器的view会自动旋转
    • 4>旋转事件->UIApplication ->Window->rootViewController ->旋转控制器的view

相关文章

  • iOS runtime 笔记总览

    个人已掌握的知识点 runtime的一些综述iOS runtime笔记一iOS runtime 笔记二 — Met...

  • iOS笔记-一些零散的知识点

    info.plist文件 1.Bundle name : app名称,项目通常使用英文,app名称显示中文 2.B...

  • iOS笔记-一些零散的知识点(中)

    UITabBarController使用 UITabBarController的使用步骤初始化UITabBarCo...

  • iOS知识点,iOS面试题, iOS面试题总结

    推荐 :iOS七年开发之路网络笔记,iOS知识点总结,iOS开发笔记。KVC /KVO的底层原理高质量 iOS 博...

  • 整理思绪,新的收获

    最近想把工作中、笔记里的一些开发经验和知识点整理出来,温故知新吧!以前的知识太零散,笔记也有碎片化的迹象了。。。 ...

  • iOS内存管理笔记

    这里只是我对iOS内存管理方面的一些关键知识点的在线笔记,帮忙记忆,未对任何知识点进行深入的分析和探究。 Tagg...

  • iOS知识点,iOS开发笔记

    前言:iOS开发之路笔记,iOS知识点总结,在ios开发路上查阅的资料,都是开发时候一点一点积累的笔记,希望能帮到...

  • iOS零散知识点

    AppDelegate生命周期 1. 应用程序启动,并进行初始化时候调用该方法: didFinishLaunchi...

  • Python学习-Tips

    查看所有Python相关学习笔记 此篇文章用于记录学习过程中接触到的零散知识点(包含已归纳到各个模块的知识点)。用...

  • iOS 开发工具,iOS 开发类库

    前言:希望对大家有帮助,感觉可以记得点下小??哦。 推荐 :iOS七年开发之路网络笔记,iOS知识点总结,iOS开...

网友评论

  • csqingyang:你好,问下LBS类型的应用 需要根据定位地点加载数据,定位一般是在哪里?给appdelegate写个分类?
    Developer_Yancy:@csqingyang 从产品角度看的话,你这个做法是合理的,因为用户也不一定允许你的应用进行定位操作,我觉得再提供一个可选地区的会更好一些。如果你一定要在首次加载的时候就定位,可以在AppDelegate的didFinishLaunchingWithOptions:里面先定位
    csqingyang:是的,想这样做。当定位成功时,我使用通知发送消息给首页控制器 但是程序第一次加载时,任然是使用默认定位的数据 然后下一次刷新时 才有数据
    我在viewDidLoad中 先 创建自己的定位对象去定位,(定位成功后,广播给首页控制器) 然后加载网络请求。
    Developer_Yancy:@csqingyang 不是很懂你意思,你意思是程序一启动马上定位位置信息?

本文标题:iOS笔记-一些零散的知识点

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