[英]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.