iOS中的UIViewController是UIKit框架中最基本的一个类。从第一个UI视图到复杂完整项目,都离不开UIViewController作为基础。...这篇博客,旨在讨论UIViewController的生命周期和属性方法,在最基础的东西上,往往会得到意想不到的惊喜。...二、UIViewController的生命周期 要了解UIViewController,先要弄清楚其生命周期。...在面向对象的语言中,是对象,就一定要有生命周期,UIViewController也不例外,生命周期管理Controller的作用范围和时间,也管理其内对象的作用范围和时间。...3:loadView方法是开始加载视图的起始方法,除非手动调用,否则在ViewController的生命周期中没特殊情况只会被调用一次。
1 UIViewController机制 1.1 生命周期 UIViewController生命周期 理解view的生命周期: 在UIViewController...controller的nibName和nibBundle属性来尝试从nib文件加载view。...从nib或者loadView函数)。...,包含了从哪个VC到哪个VC等各类信息,一般不需要开发者自己实现。...其实从根本来说它们所承担的是两类完全不同的任务:自定义VC容器可以提供自己定义的VC结构,并保证系统的各类方法和通知能够准确传递到合适的VC,它提供的transition方法虽然可以实现一些简单的UIView
无论是从nib文件加载,还是通过纯代码编写界面,viewDidLoad方法都会执行。我们可以重写这个方法,对通过nib文件加载的view做一些其他的初始化工作。...三、UIView生命周期其他点 layoutSubviews的被调用的时机: addSubview会触发layoutSubviews,比如viewA add viewB,第一次添加A和B的layoutSubviews...四、程序的生命周期 应用程序的状态: Not running未运行:程序没启动。...,我们使用UIWindow和UIView来呈现界面。...从继承关系来看,UIWindow继承自UIView,所以UIWindow除了具有UIView的所有功能之外,还增加了一些特有的属性和方法,而我们最常用的方法,就是在App刚启动时,调用UIWindow的
一个window对象有几个职责: 它包含您的应用程序的可见内容。 它在将触摸事件传递到View和其他应用程序对象中起着关键作用。...如果要更改显示的内容,请改为改变window的最前面的view。 大多数iOS应用程序在其生命周期中只创建并使用一个window。...该window横跨设备的整个主屏幕,并在应用程序生命周期的早期从应用程序的主要nib文件(或以编程方式创建)加载。...但是,您可以使用应用程序的window对象来执行几个与应用程序相关的任务: 使用window对象将点和矩形转换为window的本地坐标系或从window的本地坐标系进行转换。...例如,要安装由VC管理的view,可以使用类似于以下内容的代码: [window addSubview:viewController.view]; 代替上述代码,您可以在您的nib文件中配置window
因为刚刚涉入IOS APP开发,对IOS应用的使用的生命周期不是很熟,所以写下此日志,以防时间一长又忘记了。...但若不使用此默认启动对象MainView,而想自定义一个启动对象,则有很多细节需要考虑。...该文件还包含应用程序资源文件的名称(nib文件,名称用NSMainNibFile键指定)。如下所示: 1. NSMainNibFile 2....MainWindow 上面的意思是指,在应用程序启动的时候,需要从nib文件中加载名为 MainWindow 的资源。...比如多文档程序中,menu的响应事件一般都是连接到FirstResponder中去的,因为主界面一般都在别的nib里面,此时的FirstResponder就是你的那个主nib的FileOwner。
本地化字符串指定参数顺序(应用场景:app内的多语言切换)【修订】 前言 使用本地化功能,可以轻松地将应用程序翻译成多种语言,甚至可以翻译成同一语言的多种方言 如果要添加本地化功能,需要为每种支持的语言创建一个子目录...当本地化的应用程序需要载入某一资源时,如图像、属性列表、nib文件,应用程序会检查用户的语言和地区,并查找相匹配的本地化文件夹。...(采用) 2、通过发通知,到各个控制器更新文字(不采用) 3.2 一个语言对应多个字符串资源文件的方案 应用场景:解决部分英文国际化没有生效的问题 存储国际化英文字符串的.string文件长度受限,...NSLog(@"开始从Localizable1 找key:%@", tmp); tmp =NSLocalizedStringFromTableInBundle...使用步骤: 首先添加获取字符串的代码,比如在ViewController.m NSString *tip = NSLocalizedString(@"Tip", @"dialog title"
有很多人,认为block的推广可取代代理设计模式,其实block并不能取代代理,代理的模式可以让代码逻辑性更强,更整洁,也会有更高的可读性和可扩展性。...比如,我们生命一个叫myLog的函数指针: #import "ViewController.h" @interface ViewController () { SEL myLog; } @end...有两种方式: 1、在编译时,使用@selector来取得函数 现在,我们应该明白@selector是什么了,它是一个编译标示,我们通过它来取到相应函数。...selector(click)]; [self.view addSubview:btn]; } -(void)click{ NSLog(@"点击了btn"); } 当然,如果要调用参数,系统提供的默认参数不超过两个...,如果参数很多,一种是我们可以通过字典传参,另一种方法比较复杂,在这里先不讨论。
.m 和 .h 后缀的文件; -- 界面设计文件 : Main.storyboard 是界面设计文件, 原来使用的是 nib 界面设计文件, storyboard 是新版本使用的; -- Supporting...: -- PlaceHolder 列表区 : 包括 File's Owner 和 First Responder 两个文件; -- Objects 列表区 : 保存界面布局文件中的 UI 控件实例;..., Objects 列表区可以看到所有的 UI 控件; (4) xib 和 nib 文件 xib 和 nib 后缀文件 : -- 新旧区别 : nib 后缀是传统格式, xib 后缀是新格式; --...nib 文件; -- nib 文件 : Interface Builder 把窗口, 菜单栏 以及 各种 UI 组件都冻结在 nib 文件中, 使用 nib 界面设计文件, 这些 UI 控件对象已经被创建好...; -- 数据交换 : 获取委托对象, 可以向其中存取数据, 可以作为 IOS 应用的通信中心, 程序组件之间通过委托对象进行数据交互; -- 处理生命周期事件 : 应用程序委托对象还处理 IOS 应用的各种生命周期事件
大家好,又见面了,我是全栈君 awakeFromNib 在使用IB的时候才会涉及到此方法的使用。...当.nib文件被载入的时候,会发送一个awakeFromNib的消息到.nib文件里的每一个对象,每一个对象都能够定义自己的awakeFromNib函数来响应这个消息。运行一些必要的操作。...当程序对Nib文件进行反序列化然后初始化时,会调用一次awakeFromNib。 可是假设你使用initWithNibName调入Nib时,awakeFromNib是不会被调用的。...} 第二句:initWithcoder是系统自己主动调用的,以后说!!! 第三句和第四句:这两局setNeedsDisplay会异步的调用drawRect来更新view的内容。...第五句:首先结束后,view之后,呼叫处理好viewDidLoad该,所以无论从代码或从IB载入中view应该调用viewDidLoad的。
属性声明的初现版本 属性声明是 Objective-C 2.0 的新增功能; @property 是编译器指令,@property 完成的工作就是属性声明; 2. 属性声明的概念 属性?...从 Xcode 4.4 开始,当我们用 @property 进行属性声明的时候,编译器就会自动帮我们生成相应的 实例变量 + 存取方法声明 + 存取方法实现; 那什么情况下会破坏这种自动合成的过程呢?...= nil; // } // @end null_unspecified(_Null_unspecified) 不确定是否为空; _Null_unspecified 是 Xcode 6.3 开始使用的...,null_unspecified Xcode 8 开始使用,并能写进 @property 的选项列表中; Ep【 Xcode 7, iOS 9】: #import "ViewController.h".../** * 移除实例对象的所有关联值 * * @param object 实例对象 * * @note 这个方法的核心目的是为了方便让实例对象的所有关联值还原到初始状态;你不应该使用此方法来对一个关联值的进行还原
iPhone下每个app可用的内存是被限制的,如果一个app使用的内存超过20M,则系统会向该app发送Memory Warning消息。...因此处理的主要工作是在viewController。 我们知道,创建viewcontroller时,执行顺序是loadview -> viewDidLoad。...这个方法的默认实现是这样:先寻找有关可用的nib文件的信息,根据这个信息来加载nib文件,如果没有有关nib文件的信息,默认实现会创建一个空白的UIView对象,然后让这个对象成为controller的主...网上对这个函数的描述含含糊糊,看了等于没看。 另外:如果controller存储了其他object和view的引用,你还得在dealloc方法中释放这些内存。...四、结论 所以流程应该是这样: (loadView/nib文件)来加载view到内存 ——>viewDidLoad函数进一步初始化这些view ——>内存不足时,调用viewDidUnload函数释放
你可以从 Object Library中拖控件(右下角)到viewcontroller 中,并修改它的布局。...,应用程序委托必须从 UIResponder 开始继承(原先则直接从NSObject继承),同时还有一个 UIWindow 属性(不同的是,它不是一个IBOutlet)。 ...在以前,如果你要定制表视图单元格,你要么在代码中向cell对象添加自己的 subviews ,要么新建一个 nib 然后从nib 中加载你自己的 cell。...拖两个 Label 到Cell 中,将它们放置到大致等于原先所在的位置。随意修改它们的字体和颜色。将两个label的高亮色为白色。...如果你连接 cell 上的一个Label 到ViewController 的 IBOutlet上,那么会有多个Label 在试图使用相同的 IBOutlet。那就麻烦了。
好我们今天的文章就这样结束了,… 才怪!...Apple Configurator 2 Apple Configurator 2是苹果公司提供的一个部署和配置工具,可以直接从AppStore下载。...OTA部署 OTA部署支持使用HTTPS的方式部署和分发你的ipa包,一个示例OTA链接地址如下: itms-services://?...个人建议直接使用源码编译而不是npm安装。 后记 本文从开发者的角度,介绍了iOS应用创建、编译、打包、测试、部署等方面, 从零开始构建并运行我们的第一个iOS程序。...既介绍了模拟器的安装测试方式, 也介绍了物理机上的打包和部署过程。其中很多地方尽可能的使用命令行去运行, 这有利于后续自动化的操作,也有利于我们理解各个选项所使用到的参数作用。
UIViewController 的生命周期 // 非storyBoard(xib或非xib)都走这个方法 - (instancetype)initWithNibName:(NSString *)nibNameOrNil...awakeFromNib 当awakeFromNib方法被调用时,所有视图的outlet和action已经连接,但还没有被确定,这个方法可以算作适合视图控制器的实例化配合一起使用的,因为有些需要根据用户喜好来进行设置的内容...loadView 当执行到loadView方法时,如果视图控制器是通过nib创建,那么视图控制器已经从nib文件中被解档并创建好了,接下来任务就是对view进行初始化。...因此loadView方法在视图控制器的生命周期内可能被调用多次。...UIView 的生命周期 - (instancetype)init { if (self = [super init]) { NSLog(@"%s",__func__);
今天我们来看看制作framework---dynamic和static这两中库需要注意的 1 基本的framework配置 配置(如下图)选择dynamic library ?...我们使用xib方式创建了tableView和cell以及一个viewcontroller 3 需要暴漏给外部使用h文件 好了基本的工程已经出来了,现在我们来看看怎么玩这两种形式的framework...对于这个库其实我们可以选择为Option形式,这样的话App启动时它是不会载入的,只有当使用到时才会动态的检测载入(这也是为啥称之为动态库啦),也正是因为此,我们的main bundle中不包含xib编译后的...采用路径方式查询资源,我们就按照路径拼接上资源所在的bungle即可) 2 xib加载 对于xib这个资源比较特殊,虽然是静态库但是依然被编译成为了nib文件存放在framework中 同样App默认也是从...其实啊,这个里面有个隐含问题:默认情况会搜素main bundle中医ViewController同名的xib,而我们的库需要加前缀才能定位,因此要手动使用加载nib的方式创建我们的Controller
控制器View的创建 首先我们来看一下控制器view创建的流程图 控制器view加载.jpeg 从图中我们可以看出,在控制器view加载过程中有两个重要的方法loadView和viewDidLoad。...控制器View的生命周期 控制器View的生命周期方法 loadView: 加载view viewDidLoad: view...viewDidDisappear: 控制器的view完全消失的时候 view生命周期方法调用顺序 viewDidLoad -> viewWillAppear -> viewWillLayoutSubviews...import "ViewController.h" @interface ViewController () @end @implementation ViewController // 自定义控制器的..., typically from a nib.
这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。...2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。 以上是来自百度百科的解释。 下面我将用代码来阐述其使用方法。...OK了,下面我们来简单的的使用一下,具体如下: #import "ViewController.h" #import "NSString+AES.h" @interface ViewController...Key是和后台约定的key哦,不然无法解密.......如后台无法解密可尝试一下这篇文章的解决方法ios端解密出现无法解密问题的解决方案 最后留下demo下载地址 如对你有帮助,请不要吝惜你的star和喜欢哦!
下面的代码是使用的全部Xcode Version 6.0.1 (6A317)书面。 因为当使用团队开发stroyboard在并购的诸多不便的时间,所有或使用.xib该文件准备ToDo App....想要实现的功能:TableView 够添加待做选项。并依照时间先后排序,能够实现删除。到点通知功能。...3、然后在Main.swift 中编写一下TableView 的数据源和代理的方法。这里我们用的是 自己定义的 Cell。...,这一功能在之前的文章(ios8 notifacation in swift)中就讲过了,这里就不反复写了。...完整的项目代码我发在github上来。须要的到这里拿。 版权声明:本文博客原创文章,博客,未经同意,不得转载。
使用CocoaPods安装 pod 'EAIntroView', '~> 2.7.0' 手动安装 添加EAIntroPage ,EAIntroView和EARestrictedScrollView 的....h和.m文件到你的工程即可....view(可以是nib),使用这种方式大多数选项就被忽略了.例如: // 基本的创建方式 EAIntroPage *page1 = [EAIntroPage page]; page1.title = @...1.3.0 开始支持Storyboard/IB 拖拽UIView 到IB文档 设置它的class为EAIntroView 创建viewcontroller 的IBOutlet 属性, @property...”),一个的nib对应每个界面.
UIViewController的生命周期及iOS程序执行顺序 当一个视图控制器被创建,并在屏幕上显示的时候。...代码的执行顺序 1、alloc 创建对象,分配空间 2、init (initWithNibName) 初始化对象,初始化数据 3、loadView从nib载入视图,通常这一步不需要去干涉。...viewDidAppear视图已在屏幕上渲染完成 当一个视图被移除屏幕并且销毁的时候的执行顺序,这个顺序差不多和上面的相反 1、viewWillDisappear视图将被从屏幕上移除之前执行 2、viewDidDisappear...视图已经被从屏幕上移除,用户看不到这个视图了 3、dealloc视图被销毁,此处需要对你在init和viewDidLoad中创建的对象进行释放 关于viewDidUnload:在发生内存警告的时候如果本视图不是当前屏幕上正在显示的视图的话...他们都可以用来在视图载入的时候,初始化一些内容。 但是他们有什么区别呢? viewDidLoad 此方法只有当view从nib文件初始化的时候才被调用。
领取专属 10元无门槛券
手把手带您无忧上云