[英]How to store an init call in an NSInvocation?
我正在尝试设置与UIPageViewController一起使用的应用程序。 从技术上讲,我可以立即实例化所有视图并将它们放置在数组中,但这会很昂贵,并且根据需要初始化视图似乎更好。 我读到NSInvocation是静态呈现的消息-所以我想我可以拥有一个基本上包含以下内容的数组: [SubclassA alloc]init], [SubclassB alloc]init], etc...
,这些消息包装在NSInvocation中。 然后,我可以在pageViewController:ViewControllerAfter / BeforeViewController:中返回该消息的结果。
我在这方面还很新,所以从根本上我可能会误解NSInvocation,但是无论哪种方式,答案仍然会有所帮助。
NSInvocation
用于处理直到运行时才知道参数的方法或数量/类型的调用。 在这里,调用的方法在编译时是固定的。 您不需要NSInvocation
。
如果要存储要作为对象执行的动作,可以将其放入数组中,则应使用块。
听起来像您想要某种惰性实例化。
您可以使用此帮助程序类
@interface LazyObject : NSObject
@property (copy) id (^block)(void));
@property (readonly) id object;
+ (instancetype)create:(id (^)(void))block;
@end
@implementation LazyObject {
id _object;
}
+ (instancetype)create:(id (^)(void))block
{
LazyObject *obj = [[self alloc] init];
obj.block = block;
return obj;
}
- (id)object
{
if (!_object) _object = self.block();
return _object;
}
@end
NSArray *array = @[[LazyObject create:^id{ return [[SomeClassA alloc] init];}],
[LazyObject create:^id{ return [[SomeClassB alloc] init];}]];
SomeClassA *a = [array[0] object];
SomeClassB *b = [array[1] object];
就像其他人说的那样, NSInvocation
不是解决您原始问题的好方法。 它旨在动态调用方法。 在大多数情况下,您不需要它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.