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:]
仅支持 NSData
、NSString
、NSNumber
、NSDate
、NSArray
或 NSDictionary
。如果您尝试将其设置为任何其他类型的对象,它通常会崩溃。可以在此处找到更多详细信息:setObject:forKey: - NSUserDefaults | Apple Developer Documentation.
当挂钩某个方法时,传递的参数是 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:]
仅支持 NSData
、NSString
、NSNumber
、NSDate
、NSArray
或 NSDictionary
。如果您尝试将其设置为任何其他类型的对象,它通常会崩溃。可以在此处找到更多详细信息:setObject:forKey: - NSUserDefaults | Apple Developer Documentation.