Three20 - открытый URL для контроллера общего доступа - PullRequest
3 голосов
/ 06 июня 2011

Я знаю, что если сопоставить URL-адрес с from:toViewController:, то открыть этот URL-адрес создаст новый контроллер представления, а если используется from:toSharedViewController, будет использоваться общий экземпляр.

Но например

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

Это вызовет что-то похожее на

 [[MyTabbarController alloc] initWithString:@"string"]

Но что будет, если TTOpenURL(@"tt://tabbar/somethingelse") будет вызван позже? Поскольку используется общий объект, будет ли initWithString: вызываться дважды в одном экземпляре?

1 Ответ

2 голосов
/ 06 июня 2011

Ответ: нет. То есть init не будет вызываться для уже инициализированного экземпляра, но будет выделен и инициализирован новый экземпляр.

Это связано с тем, что Three20 связывает объект с полным URL-адресом, который в вашем случае является либо «tt: // tabbar / string», либо «tt: // tabbar /thingelse», так что при запросе TTURLMap , уже существующий объект не будет найден, а новый будет создан. По крайней мере, это верно для Three20 1.0.3. Но, думаю, они этого не изменили.

По моему мнению, механизм общего контроллера должен использоваться в очень специфических случаях, например, для представления настроек, и его не следует рассматривать как своего рода синглтон, реализованный на Three20. Каждый раз, когда я пытался использовать это для более «умного» использования TTURLMap, я обнаруживал, что возвращаюсь к контроллеру без общего доступа.

...