一行语句实现懒加载属性定义,具有自动触发和自定义选择器功能
仅支持 ARC,XCode 4.4 及以上版本(用于自动合成属性)
处理懒加载属性有时可能很繁琐,需要反复复制粘贴相同代码。
这在阅读源文件时可能会造成困扰。
有时,您在属性初始化时必须执行一些代码。
更多关于懒实例化的信息,请参阅维基百科:懒实例化
RootViewController.m
@interface DemoViewController ()
...
// Lazy properties
@property (nonatomic, strong) SimpleViewController *simpleViewController; // Will be used modally
@property (nonatomic, strong) DetailViewController *detailViewController; // Will be pushed from tableview
@end
@implementation DemoViewController
...
#pragma mark - UITableViewDelegate methods
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// No need to worry about detail view controller instantiation. It will be created at first call
// This allows you to keep your code super clear
[self.navigationController pushViewController:self.detailViewController
animated:YES];
}
#pragma mark - UIActions
- (IBAction)showModal:(id)sender
{
// No need to worry about view controller instantiation here too. It will be created at first call
// First configuration was moved to a dedicated method, auto triggered on object creation
[self presentViewController:self.simpleViewController
animated:YES
completion:nil];
}
#pragma mark - Configuration methods
// This method will be autotriggered when simpleViewController will be instantiated
- (void)configureSimpleViewController
{
// This methods will be called only once, so you can perform initial configuration here
_simpleViewController.backgroundColor = [UIColor redcolor];
}
// Magic happens here. Write macros at the end of the file, to keep it clean. Use property name
LAZY_PROPERTY(simpleViewController);
LAZY_PROPERTY(detailViewController);
@end
在提供的示例中可以找到更多示例,例如使用自定义选择器。
如果您有其他用例,请告诉我
只支持 strong 属性。延迟 weak 属性可能在每次调用时实例化一个新实例。《strong》属性不支持。当重写 atomic 属性时,你必须重写获取器和设置器。在原子属性上使用 LazyProperty 会导致编译器警告信息。
Cocoapods: pod 'LazyProperty'
手动: 将项目中的 Classes 文件夹复制
在你的项目中导入头文件。.pch 是一个好位置 ;)
#import "LazyProperty.h"
1.0 : 初始版本 1.1 : 添加了一些测试,触发方法可以有一个参数,从生成的获取器中移除了 @synchronized
Nicolas Goutaland