Resource Programming Guide 之 Nib Files (3)

2024-04-24 08:32

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

管理Nib文件中对象的声明周期

     每次你让NSBundle或NSNib 类去加载一个nib文件时,基础代码会创建文件中对象的新的拷贝,然后把他们返回给你,(nil-loading 代码不会循环加载之前尝试加载的Nib

     文件对象,你需要确保在必要的时候维护新的对象图表,当完成时要和它脱离关系。通常你要对高级对象用强引用以确保他们不会被销毁;你没必要强引用哪些图表中有父类

     的类。你应该最小化强引用循环的风险。从实用的角度,在IOS和OSX的输出口中应该被定义为声明属性,输出口一般式weak ,除了Nib文件中的高级对象,这些应该是strong

     你创建的输出口一般都是weak,因为

      你创建的输出口是控制器的子视图或窗口的子视图,比如在对象间的随意引用不意味着有拥有权

      强输出口通常是框架类具体指定的,比如UIViewController 的输出口,Window 的输出口

@property (weak) IBOutlet MyView *viewContainerSubview;
@property (strong) IBOutlet MyOtherClass *topLevelObject;

提示: 在OSX中不是所有的类支持弱引用,有

 NSATSTypesetter, NSColorSpace, NSFont, NSFontManager, NSFontPanel, NSImage, NSMenuView,NSParagraphStyle, NSSimpleHorizontalTypesetter, NSTableCellView, NSTextView, NSViewController, 
NSWindow, and NSWindowController, and all classes in the AV Foundation framework.
这些不支持weak 的,你应该用assign

@property (assign) IBOutlet NSTextView *textView;

输出口对定义类来说可以认为是私有的,如果你引用,你可以隐藏属性声明一个类的拓展,举例

// MyClass.h@interface MyClass : MySuperclass
@end// MyClass.m@interface MyClass ()
@property (weak) IBOutlet MyView *viewContainerSubview;
@property (strong) IBOutlet MyOtherClass *topLevelObject;
@end

这些模式是为了容器视图对子视图的引用,这里你必须考虑内在的对象图表的一致性。比如在table view cell 输出口是具体的子视图通常是weak,如果table view 包含一个图片视图 和一个 文本视图, 那么这些仍然有效,主要他们是table view cell 自己的子视图。当输出口是自己引用对象时应该改为强引用

如前面说明的,那File's Owner 举例,Nib文件的高级对象通常被认为属于File's Owner

有时候你可能需要Nib文件中的一个对象存在它外部容器里。举例,你可能有一个视图的输出口,这是它可能暂时被原来层次视图中移除了,因此它必须维护一定的独立性

有时候你想把父类中的输出口暴露给子类,以便子类可以合理的使用(像UIViewController的 View 输出口)。输出口可能会暴露给那些自定义类来实现和这些属性的交互。

比如 table view cell 可能暴露给子视图,在之后的例子中,它可以适当的暴露 给public 一个只读 输出口 ,在private 里重写 为 读写属性 例子如下:

// MyClass.h@interface MyClass : UITableViewCell
@property (weak, readonly) MyType *outletName;
@end// MyClass.m@interface MyClass ()
@property (weak, readwrite) IBOutlet MyType *outletName;
@end
OSX中的高级对象需要特殊处理

由于历史的一些原因,OSX中Nib的一些高级对象是以增加引用计数的方式创建的。应用包提供了一对特性来确定这些Nib文件是否被合理释放:

NSWindow 对象(包括 panels)有一个 isReleasedWhenClosed 属性,如果设值为YES这个窗口在关闭的时候,他自己会释放自己以及所有依赖它的对象,在Nib文件中在Xcode的检查器中选择性释放设值选择


(时间精力有限,暂且先翻译到此。。。。hu。。hu。。。hu。。。。)

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



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

相关文章

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