Three20 - 用于共享视图控制器的打开URL

时间:2011-06-06 10:06:08

标签: objective-c ios three20

我知道如果使用from:toViewController:映射网址,则打开该网址会创建一个新的视图控制器,如果使用from:toSharedViewController,则会使用共享实例。

但是例如

 [map from:@"tt://tabbar/(initWithString:)" toSharedViewController:[MyTabbarController class]];
 TTOpenURL(@"tt://tabbar/string");

这将调用与

类似的内容
 [[MyTabbarController alloc] initWithString:@"string"]

但如果稍后调用TTOpenURL(@"tt://tabbar/somethingelse")将会发生什么? 由于使用了共享对象,因此initWithString:会在同一个实例上调用两次吗?

1 个答案:

答案 0 :(得分:2)

答案是:不。即,不会在已初始化的实例上调用init,但会分配并初始化新实例。

这是因为Three20将对象与其完整URL相关联,在您的情况下是“tt:// tabbar / string”或“tt:// tabbar / somethingelse”,因此在查询{{1 ,没有找到现有的对象,将实例化一个新的对象。至少,从Three20 1.0.3开始就是如此。但我猜他们没有改变这一点。

在我看来,共享控制器机制将用于非常特殊的情况,例如设置视图,并且它不应该被认为是一种Three20实现的单例。每当我试图依靠这个来更加“巧妙”地使用TTURLMap时,我发现自己会回到非共享控制器。