Resource Programming Guide 之 Nib Files(2)

2024-04-24 08:32

本文主要是介绍Resource Programming Guide 之 Nib Files(2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Nib文件设计指南

    当创建你的Nib文件时,最应该认真思考的是如何使用这些Nib中的对象一个简单的应用可能在Nib文件中存储所有用户界面元素,当对大多数应用来说,最好把这些元素分到不同的Nib文件中。创建小的Nib文件会让你立即加载界面的这些部分在需要的时候,它们也会让你调试更容易些,即使只有很少的地方寻找问题。当创建Nib文件时,下面的指南应该记在心里。

     1) 用懒加载的方式设计你的Nib文件。计划加载Nib文件时,只马上加载你包含对象中所需要的

     2) 对于OSX应用程序的主Nib文件,考虑到只存储应用的Nib文件的菜单条和选择性的应用代理对象,为了避免包括的一些窗口或用户界面元素在应用启动后不会被用到,

         相反,把这些资源隔离在Nib文件中,只在启动后用到时再加载。

     3) 存储重复的用户界面元素在分离的Nib文件中(比如文件窗口)

     4) 对应偶然用到的窗口或菜单条,也把它存储在分离的Nib文件中。通过存储在不同的Nib文件中,有且仅有当这些资源被用过,你才加载这些资源到内存中去。

     5) 让File‘s Owner 只作一些Nib文件的外部接触点

NIb对象的生命周期

     当一个Nib文件加载到内存中,Nib-loading 代码需要确保这些对象在Nib文件中被创建并且已经初始化了。理解了这些步骤会帮助你写出漂亮的代码管理你的用户界面

对象加载过程

     当你用到NSNib 或NSBundle的方法加载或实例化Nib文件里的对象时,基本的nib-loading 代码做。。如下

     1. 它加载Nib文件的内容和一些引用资源文件到内存

           1)所有Nib文件对象图标的生数据被加载到内存但是没有解归档

           2)任何和Nib有关的自定义图片资源加载添加到Cocoa 图片缓存中 :看“About Image and Sound Resources"

           3)任何和Nib有关的自定义声音资源背景载到Cocoa 声音缓存中:看 ”About Image and Sound Resources"

    2. 它解归档Nib对象图表数据,初始化这些对象,它怎么初始化每个对象取决于每个对象 的类型以及它是怎么归档的。nib-loading 代码使用如下的规则去决定用哪一种初始

        化方法。

           a)默认,对象会收到一条initwithCoder: 消息

                 在OSX中,标准对象的列表包括视图,单元格,菜单条,视图控制器,它们是由系统提供的而且在默认的Xcode库中是可以访问的。它同样也允许使用自定义组件

                 把第三方对象添加到库中,即使你改变了这个对象的类,Xcode把标准对象归档到Nib文件中,然后告诉文档在对象解归档的时候交换自定义类,在iOS中,任何对象

                 遵守NSCoding协议都用initWithCoder方法初始化,这包括了所有的UIView 和UIViewController 的子类 ,要么是部分Xcode库要么是自定义类

          b)OSX中的自定义视图会收到initWithFrame: 消息

                 自定义视图是NSView的子类,这些子类Xcode没有可用的实现,通常是你应用中的一些自定义视图,用于自定义可视化内容。自定义视图不包括标准系统视 图                          ( 像NSSlider),它们是默认库的一部分或者是第三方集成组件。当它遇到自定义组件时,Xcode 会归档一个特殊的NSCustomView 对象到你的Nib文件中,这个

                自定义对象包括它需要创建指定的视图子类的信息。在加载时,这些NSCustomView对象发送一个alloc 和initWithFrame: 消息到真实的视图类中然后交换结果视图

               对象,这个效果是真实视图对象处理后来的交换在nib-loading 处理过程中,在IOS中的自定义视图不用initWithFrame:方法初始化

         c) 自定义对象而不是之前步骤中描述的会收到一个init 消息

    3. 它重新创建Nib文件中的所有对象之间的连接(动作,输出口,绑定)。这包括连接到File’s Owner 和其他的占位对象。创建连接的不同方法取决于平台

         a) 输出口连接

          在OSX中,nib-loading 代码试图先用自己的方法重新连接输出口,对每个输出口来说,Cocoa 会寻找一个设置输出口名称的方法 setOutletName: 以及在展示的时候

          执行它,如果它不能找到这样一个方法,Cocoa 会为这个对象搜索相应的输出口名称的实例变量,试图直接给它设值,如果实例变量找不到,不会有连接创建

          在OSX v 10.5 以后,设置输出口 也会对所有注册的观察者产生键值观察者通知,这些通知会发生在所有inter-object 连接重建、所有awakeFromNib方法执行之前

          和v 10.5之前的版本相比,这些通知不会产生,更多关于KVO通知 看 "Key-Value Observing Programming Guide"

          在iOS中,nib-loading 代码用 setValue:forKey: 方法去重新连接每个输出口。那方法很像寻找一个合适的存取器方法,当失败后依靠其他的意思。更多关于这个方法

          set Values 看它的描述 NSKeyValueCoding Protocol Reference 设置一个IOS的输出口会对每个注册的观察者产生一个KVO通知,这些通知同样可能发生在所有

         inter- object 连接重建之前以及所有对象的awakeFromNib 方法调用。更多关于KVO通知 看:"Key-Value Observing Programming Guide"

     4. 动作连接

             在OSX中,nib-loading 代码用源对象 setTarget 和 setAction: 方法去重建和目标对象的连接。如果目标对象对动作方法没有反应,不会有连接创建。如果目标对象是

             空,这个动作将会被响应链处理

             在iOS中, nib-loading 代码会用UIControl 对象的 addTarget:action: forControlEvents: 方法去执行这个动作,如果目标为空,动作同样也被响应链处理

     5. 绑定

           在OSX中Cocoa用源对象 bind:toObject:withKeyPath:options: 方法去创建它和它的目标对象的连接

           在IOS中不支持绑定

 4. 它向Nib文件中合适的对象发送一个 awakeFromNib 消息,这个对象定义了匹配的selector

            在OSX中,这个消息会发送到每个定义这个方法的界面对象。同样也发送到File‘s Owner 和其他定义的占位对象

            在iOS中, 这个消息只发送给被nib-loading 代码实例化的界面对象,它不不发送给File's Owner ,First Responder ,或者其他的占位对象

 5. 当在Nib文件中的启动时可见属性支持时,他会的展示在任意窗口

            nib-loading 代码调用对象的awakeFromNib方法的顺序是不确定的,在OSX中,Cocoa 努力最后调用File's Owner的awakeFromNib ,但是行为是不能得到保证的

           如果你需要进一步确定对象在你的Nib文件中,在加载时,最合适的时间去做是nib-loading 调用返回时。在那个点,所有的对象都创建,初始化,而已已经在使用了


这篇关于Resource Programming Guide 之 Nib Files(2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/931250

相关文章

12C 新特性,MOVE DATAFILE 在线移动 包括system, 附带改名 NID ,cdb_data_files视图坏了

ALTER DATABASE MOVE DATAFILE  可以改名 可以move file,全部一个命令。 resue 可以重用,keep好像不生效!!! system照移动不误-------- SQL> select file_name, status, online_status from dba_data_files where tablespace_name='SYSTEM'

java读取resource/通过文件名获取文件类型

java读取resource java读取resource目录下文件的方法: 借助Guava库的Resource类 Resources.getResource("test.txt") 通过文件名获取文件类型 mongodb java

GDB watch starti i files

watch break starti 在程序的最初开始运行的位置处断下来 ​​ i files 查看程序及加载的 so 的 sections ​​

访问controller404:The origin server did not find a current representation for the target resource

ider build->rebuild project。Rebuild:对选定的目标(Project),进行强制性编译,不管目标是否是被修改过。由于 Rebuild 的目标只有 Project,所以 Rebuild 每次花的时间会比较长。 参考:资料

mybatis错误——java.io.IOException Could not find resource comxxxxxxMapper.xml

在学习Mybatis的时候,参考网上的教程进行简单demo的搭建,配置的没有问题,然后出现了下面的错误! Exception in thread "main" java.lang.RuntimeException: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause:

MACS bdgdiff: Differential peak detection based on paired four bedGraph files.

参考原文地址:[http://manpages.ubuntu.com/manpages/xenial/man1/macs2_bdgdiff.1.html](http://manpages.ubuntu.com/manpages/xenial/man1/macs2_bdgdiff.1.html) 文章目录 一、MACS bdgdiff 简介DESCRIPTION 二、用法

Stripe data files across multiple physical devices and locations

Stripe data files across multiple physical devices and locations 如果在没有做条带的磁盘(即从存储到OS没有做raid),那么就需要手工去做I/O的分布。切记,不应该将频繁使用的table和其index分开,这样会正大I/O; 针对tables、indexes、temp tablespace,首先调优SQL,其次如果真心无法再

kubernetes Pod failed to create fsnotify watcher: too many open files

fs.nr_open: 控制单个进程可以打开的文件描述符的最大数量。单个进程的文件描述符限制可以通过 ulimit 命令来设置。 /proc/sys/fs/nr_open 是一个系统级别的全局参数,表示系统中单个进程能够打开的文件描述符总数的限制。/proc/sys/fs/file-max 系统级别,当前系统可打开的最大数量/etc/security/limits.conf 用户级别,指定用户

spring使用@Resource 注入map

spring使用@Resource 注入map 注入多个Service: /*** 单笔付款状态 MQ消费** @author zkg* @since 2024-09-06 16:11:19*/@Slf4j@Component@RocketMQMessageListener(topic = PayGlobalConstants.PAY_APPL_SINGLE_TOPIC, consume

大数据Java基础-JAVA IO 9】java IO流 (九) Path、Paths、Files的使用

1.NIO的使用说明: >Java NIO (New IO,Non-Blocking IO)是从Java 1.4版本开始引入的一套新的IO API,可以替代标准的Java IO AP。 >NIO与原来的IO同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的(IO是面向流的)、基于通道的IO操作。 >NIO将以更加高效的方式进行文件的读写操作。 >随着 JDK 7 的发布,Java对N