Objective-C/THEOS - 是否可以保存 NSMallocBlock?

Objective-C/THEOS - Is it possible to save a NSMallocBlock?

当挂钩某个方法时,传递的参数是 NSMallocBlock。我需要保存此值以便稍后在从我的代码中调用该方法时使用它。我试图将其保存为用户默认值,但这会导致程序崩溃。无论如何要保存对象或稍后重新创建它?

在本地,块不能被持久化。

@interface AwesomeClass : NSObject

@property (nonatomic, copy, nullability) returnType (^blockName)(parameterTypes);

@end

(块语法通过 How Do I Declare A Block in Objective-C?

这将允许您保留对块的引用以供稍后执行程序。请注意,您应该始终使用 copy,因为大多数块都是在堆栈上初始化的。如果你不这样做,就会发生奇怪的事情。

顺便说一句,NSUserDefaults 是为在程序执行之间保留少量数据而设计的。 -[NSUserDefaults setObject:forKey:] 仅支持 NSDataNSStringNSNumberNSDateNSArrayNSDictionary。如果您尝试将其设置为任何其他类型的对象,它通常会崩溃。可以在此处找到更多详细信息:setObject:forKey: - NSUserDefaults | Apple Developer Documentation.