【发布时间】:2015-02-11 11:36:02
【问题描述】:
我正在创建第三方库,我需要找到一种以幂等方式创建唯一标识符的方法。我会尽力解释。
假设您是UIViewController,例如MyViewController。该库公开了两个不同的 API 来注册/注销组件。
当我对视图控制器执行register 时,我需要为控制器创建一个唯一标识符,该标识符在被释放之前应该是有效的。如果我创建这个控制器的另一个实例,标识符应该不同。
换句话说,假设我有
MyViewController* a = // alloc-init
现在在a 内,我这样注册自己
// I'm within viewDidLoad for example
[[LibraryManager sharedManager] registerEntry:self];
此时,我的需求如下:根据我传入的实例创建一个唯一标识符(在我的库中)。
如果a想注销,可以这么简单
// I'm within dealloc for example
[[LibraryManager sharedManager] deregisterEntry:self];
根据传入的实例 (self),我需要(以某种方式)检索先前创建的标识符,以便清除使用 register 方法创建的内容。
如果我创建另一个控制器,比如b,则标识符应该与使用a 创建的不同。
我不会依赖委托模式来要求控制器(在这种情况下)通过 [[NSUUID UUID] UUIDString]; 或类似的方式提供唯一标识符。
有没有办法根据传入的实例创建唯一标识符?我正在考虑存储内存地址或类似的字符串表示形式,但这是一种 hack,恕我直言。
【问题讨论】:
-
你能写一个随机字符串生成器函数吗?如果字符串有 40 个字符,那么它至少有 40 分之 1 是唯一的
标签: objective-c uniqueidentifier idempotent