iOS_UIKit

xib相关(十六) —— UINib之基本介绍(一)

2018-04-30  本文已影响104人  刀客传奇

版本记录

版本号 时间
V1.0 2018.04.30

前言

iOS中的视图加载可以有两种方式,一种是通过xib加载,另外一种就是通过纯代码加载。它们各有优点和好处,xib比较直观简单,代码比较灵活但是看着很多很乱,上一家公司主要风格就是用纯代码,这一家用的就是xib用的比较多。这几篇我们就详细的介绍一个xib相关知识。感兴趣的可以看上面写的几篇。
1. xib相关(一) —— 基本知识(一)
2. xib相关(二) —— 文件冲突问题(一)
3. xib相关(三) —— xib右侧标签介绍(一)
4. xib相关(四) —— 连线问题(一)
5. xib相关(五) —— 利用layout进行约束之界面(一)
6. xib相关(六) —— 利用layout进行约束之说明和注意事项(二)
7. xib相关(七) —— Storyboard中的segue (一)
8. xib相关(八) —— Size Classes(一)
9. xib相关(九) —— 几个IB修饰符(一)
10. xib相关(十) —— xib的国际化(一)
11. xib相关(十一) —— xib的高冷用法之修改视图的圆角半径、边框宽度和颜色(一)
12. xib相关(十二) —— UIStackView之基本介绍(一)
13. xib相关(十三) —— UIStackView之枚举UIStackViewDistribution使用(二)
14. xib相关(十四) —— UIStackView之UIStackViewAlignment使用(三)
15. xib相关(十五) —— UIStackView之工程实践(四)

回顾

上一篇主要讲述了UIStackView的工程实践,这一篇主要讲述UINib。


Overview

UINib对象在内存中缓存nib文件的内容,准备进行解档和实例化。当您的应用程序需要实例化nib文件的内容时,它可以做到这一点,而无需首先从nib文件加载数据,从而提高性能。 UINib对象可以在内存不足的情况下自动释放此缓存的nib数据以释放内存给应用程序,并在下次应用程序实例化nib时重新加载该数据。只要需要反复实例化相同的nib数据,应用程序就应该使用UINib对象。例如,如果您的table view使用nib文件来实例化table view cell,则在UINib对象中缓存nib可以显着提高性能。

当您使用nib文件的内容创建UINib对象时,该对象会将对象图加载到引用的nib文件中,但尚未将其解压缩。为了解开所有的nib数据并因此真正实例化nib,应用程序会调用UINib对象上的instantiateWithOwner:options:方法。在Resource Programming Guide详细的描述了UINib对象遵循以实例化该nib的对象图的步骤。


Topics

1. Creating a Nib Object

2. Instantiating a Nib


API - UINib

Xib其实就是固化在bundle里面的文件,每次加载都需要从Xib进行唤醒。

UINib就是封装或包含Interface Builder nib文件的对象。

先看一下UINib的API

#import <Foundation/Foundation.h>
#import <UIKit/UIKitDefines.h>

NS_ASSUME_NONNULL_BEGIN
    
NS_CLASS_AVAILABLE_IOS(4_0) @interface UINib : NSObject 

// If the bundle parameter is nil, the main bundle is used.
// Releases resources in response to memory pressure (e.g. memory warning), reloading from the bundle when necessary.
+ (UINib *)nibWithNibName:(NSString *)name bundle:(nullable NSBundle *)bundleOrNil;

// If the bundle parameter is nil, the main bundle is used.
+ (UINib *)nibWithData:(NSData *)data bundle:(nullable NSBundle *)bundleOrNil;

// Returns an array containing the top-level objects from the NIB.
// The owner and options parameters may both be nil.
// If the owner parameter is nil, connections to File's Owner are not permitted.
// Options are identical to the options specified with -[NSBundle loadNibNamed:owner:options:]
- (NSArray *)instantiateWithOwner:(nullable id)ownerOrNil options:(nullable NSDictionary *)optionsOrNil;
@end

NS_ASSUME_NONNULL_END

这里需要说明的是:

1. + (UINib *)nibWithNibName:(NSString *)name bundle:(nullable NSBundle *)bundleOrNil;

该方法的作用就是创建一个UINib对象。

如果bundle的参数是nil,那么就使用 main bundle,在内存压力(内存警告)紧张的时候会释放该资源,并根据需要从buudle加载数据。

2. + (UINib *)nibWithData:(NSData *)data bundle:(nullable NSBundle *)bundleOrNil;

该方法的作用就是创建一个UINib对象。

如果bundle的参数是nil,那么就使用 main bundle。

3. - (NSArray *)instantiateWithOwner:(nullable id)ownerOrNil options:(nullable NSDictionary *)optionsOrNil;

该方法的作用实例化UINib对象。

该方法返回一个从NIB中加载的包含顶部级别的对象数组,owner和options参数均可为nil,如果owner参数为nil,那么链接File's Owner就不被允许,Options与-[NSBundle loadNibNamed:owner:options:]指定的options的参数是一样的。

后记

本篇主要讲述了UINib相关,感兴趣的给个赞或者关注~~~~

上一篇 下一篇

猜你喜欢

热点阅读