在iOS中ViewController的基类是UIViewController;Mac中ViewController的基类是NSViewController。

Mac中ViewController父类是NSViewController,子类很少,笔者就查到了NSPageController。如果应用中需要,可以Customize。

iOS中有好多个ViewController,在Ref2中有介绍,其父类是UIViewController,子类包括UINavigationController、UITabBarController、UIPageViewController等。也可以Customize。

在应用中如何使用ViewController呢?还有Window、WindowController之间都是什么关系呢? 下面先说说流水账。

1. 在Mac上创建一个Window,我们需要指定这个Window的File‘s Owner,这个File’s Owner需要是一个WindowController的子类;而iOS上不会创建一个Window,也不需要WindowController,因为iOS上的Window非常简单,它不需要title bars, close boxes, or any other visual adornments;

2. 不论在iOS上还是Mac上,如果我们需要在xib文件中创建一个view时,需要指定这个View的File‘s Owner,这个File’s Owner需要是一个ViewController的子类;或者时UIViewController或者时NSViewController;

3. 在Mac上,创建一个view 的xib文件后,会有一个Application的Placeholder对象出现在IB中,如同其所在的category说的一样,它是一个Placeholder,<TBD>;

4. 在Mac上创建一个Window的xib文件后,跟创建view时不一样的地方在于,Window的xib中有一个栏目时Object,和PlaceHolder时并列的,Mac和iOS上创建View的xib文件时就没有,这个源于Window与view的不同。先看Xcode给默认加入的三个对象:Main Menu、App Delegate和Font Manager。这个话题需要另开新帖。<TBD>;

5. 在Mac和iOS上开发的不同在于,Mac上偏重Window,View次之,而iOS上可以说时99%是View。比如我们要显示一个Image+一段文字描述,在Mac上通常可以在一个Window上拉进两个View,一个ImageView,一个TextField view,然后由WindowController来处理,当然也可以创建一个customized 的view,这个view包括一个ImageView,一个TextField view,然后配上一个custom view controller;而iOS上搞一个root view,然后像Mac上那样搞也可以,但是如果一个应用的页面多了,管理起来就麻烦了,一个页面显示Image,另外一个页面就是tab view了,难道把之前的全删掉,然后加新的,或者新搞一个window,然后替换当前的window?都不太自然,即使能实现,成本也高了很多。所以最好的方式就是创建一个自定义的view,然后加一个custom viewcontroller。

6. ViewController干了什么,什么情况下需要customize view controller? view controller是UI设计MVC模式中的C,对于iOS上的UIViewcontroller,我写过一篇博文,没深入挖掘什么,就是读了一下Apple的文档,乱写的,概括来说,有这么几个功能:View Management,rotation management等。而Mac上的NSViewController最主要的就是view management。显著的区别就是iOS需要管理view的什么周期,并把若干callback函数暴露出来,让developer来定制在什么时候干什么事,比如在ViewWillAppear中可以设置status bar的方向和样式以使status bar和要显示的view风格一致等等。什么时候需要customized viewcontroller?这个对于Mac和iOS是通用的,如果定制了View,就需要定制的viewcontroller,因为view controller需要管理这个view,对这个view中每个button如何显示,点击后反应是什么,awakeFromnib怎样实现都得提供支持。

7. 问题回到最初,为什么iOS上有那么多UIViewController的子类,而Mac上却少有NSViewController的子类呢?iOS上view的显示空间小,要高效地显示往往总要采取那几种方式,Apple提取了若干种非常常用的view,对其提供了UIViewController的子类帮助开发者直接使用,从而缩短开发时间。而Mac上有足够的空间,开发者可以随便搞,很难抽取共同的模式,即便少,但还是有NSPageController来提供显示多页时使用,如果你的应用中有这种固定模式,你可以提供一个给整个应用来用。

对比学习UIKit和AppKit -- ViewController的更多相关文章

  1. 对比学习UIKit和AppKit--入门级

    UIKit是用来开发iOS的应用的,AppKit是用来开发Mac应用的,在使用过程中他们很相似,可是又有很多不同之处,通过对比分析它们的几个核心对象,可以避免混淆. UIKit和AppKit都有一个A ...

  2. 突破瓶颈,对比学习:Eclipse开发环境与VS开发环境的调试对比

    曾经看了不少Java和Android的相关知识,不过光看不练易失忆,所以,还是写点文字,除了加强下记忆,也证明我曾经学过~~~ 突破瓶颈,对比学习: 学习一门语言,开发环境很重,对于VS的方形线条开发 ...

  3. MongoDB(五)mongo语法和mysql语法对比学习

    我们总是在对比中看到自己的优点和缺点,对于mongodb来说也是一样,对比学习让我们尽快的掌握关于mongodb的基础知识. mongodb与MySQL命令对比 关系型数据库一般是由数据库(datab ...

  4. Java程序员学C#基本语法两个小时搞定(对比学习)

    对于学习一门新的语言,关键是学习新语言和以前掌握的语言的区别,但是也不要让以前语言的东西,固定了自己的思维模式,多看一下新的语言的编程思想. 1.引包 using System;java用import ...

  5. [转] Java程序员学C#基本语法两个小时搞定(对比学习)

    Java程序员学C#基本语法两个小时搞定(对比学习)   对于学习一门新的语言,关键是学习新语言和以前掌握的语言的区别,但是也不要让以前语言的东西,固定了自己的思维模式,多看一下新的语言的编程思想. ...

  6. mysql与sql server参照对比学习mysql

    mysql与sql server参照对比学习mysql 关键词:mysql语法.mysql基础 转自桦仔系列:http://www.cnblogs.com/lyhabc/p/3691555.html ...

  7. mongo语法和mysql语法对比学习

    我们总是在对比中看到自己的优点和缺点,对于mongodb来说也是一样,对比学习让我们尽快的掌握关于mongodb的基础知识. mongodb与mysql命令对比 关系型数据库一般是由数据库(datab ...

  8. ICLR2021对比学习(Contrastive Learning)NLP领域论文进展梳理

    本文首发于微信公众号「对白的算法屋」,来一起学AI叭 大家好,卷王们and懂王们好,我是对白. 本次我挑选了ICLR2021中NLP领域下的六篇文章进行解读,包含了文本生成.自然语言理解.预训练语言模 ...

  9. Blazor和Vue对比学习:说在开始前

    1.Vue:现代前端三大框架之一(Vue/React/Angualr),基于HTML.CSS和JavaScript,2014年正式对外发布,目前已发展到3.X版本.值得说道的是,Vue的创始人作者是华 ...

随机推荐

  1. python发送邮件方法

    1.普通文本邮件 #!/usr/bin/env python # -*- coding:utf-8 -*- import smtplib from email.mime.text import MIM ...

  2. 【转】eclipse安装SVN插件的两种方法

    转载地址:http://welcome66.iteye.com/blog/1845176 eclipse里安装SVN插件,一般来说,有两种方式: 直接下载SVN插件,将其解压到eclipse的对应目录 ...

  3. HTML5的数据自动补齐功能

    使用datalist元素,HTML5允许使用一组数据来生成自动补齐功能,现在你不需要使用第三方js代码或者类库啦! <input name="frameworks" list ...

  4. [问题2014S05] 复旦高等代数II(13级)每周一题(第五教学周)

    [问题2014S05]  设 \(A,B\) 分别是 \(4\times 3\) 和 \(3\times 4\) 实矩阵, \[ BA=\begin{pmatrix}-9 & -20 & ...

  5. 遗传算法在JobShop中的应用研究(part 2:编码)

    编码 在上一篇博客中我们讨论了车间调度问题的编码,具体说就是根据工件的个数和每个工件的工序数来生成12122这样的数字排列,具体的说一个工件包含多少道工序,那么这个工件的编号就出现多少次.从12122 ...

  6. struts(三) ---OGNL的学习和理解

    OGNL:Object graphic Navgation Language(对象图形的导航语言)

  7. 关于 RxJava 技术介绍

    Awesome-RxJava RxJava resources Blog 给 Android 开发者的 RxJava 详解 -强烈推荐 扔物线的文章 讲解非常详细 NotRxJava懒人专用指南 -这 ...

  8. Deep Learning 2_深度学习UFLDL教程:矢量化编程(斯坦福大学深度学习教程)

    1前言 本节主要是让人用矢量化编程代替效率比较低的for循环. 在前一节的Sparse Autoencoder练习中已经实现了矢量化编程,所以与前一节的区别只在于本节训练集是用MINIST数据集,而上 ...

  9. 20160908_Redis主从复制Replication

    1.主从redis,安装配置都是一样的.下面开始从服务器的配置. 参考的网址为:http://yanliu.org/2015/08/27/Redis%E4%B8%BB%E4%BB%8E%E5%A4%8 ...

  10. MTF(Move-to-front transform)数据转换

    1.什么是MTF MTF(move-to-front)是一种数据编码方式,用于提高数据压缩技术效果. 在数据压缩算法中,MTF可以作为一个额外的步骤.也就是说 ,可以先进行MTF编码,在进行数据压缩. ...