Вызов функции делегата и возврат результата
Я делаю небольшой тестовый проект с SocketRocket на IOS. Но я не могу обернуться вокруг логики.
Вот в чем дело: у меня должна быть своего рода "глобальная" функция для вызова сокетов. Когда мое приложение откроется, оно должно подключиться с помощью веб-сокетов.
_webSocket.delegate = nil;
[_webSocket close];
_webSocket = [[SRWebSocket alloc] initWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"ws://localhost:12345/connectr"]]];
_webSocket.delegate = self;
self.title = @"Opening Connection...";
[_webSocket open];
Однако мне нужно получить логику при подключении к функции делегата. Я уже думал об одноместном коде, но я читал, что одноэлементные функции довольно дорогие.
Итак, в основном мой вопрос: каков наилучший способ инициировать глобальную доступную функцию, которая использует инициализированный (appdelegate) экземпляр SocketRocket.
3 ответа
Вы объявляете переменную в appdelegate со свойством и синтезом
вы импортируете класс appdelegate в свой класс требований
AppDelegate *objappdel=(AppDelegate*)[[UIApplication sharedApplication]delegate];
objappdel.variablename;
Вы можете использовать синглтон без проблем. В самом деле. Это намного лучше, чем сделать ваш AppDelegate с 50000 LOC. Кроме того, ваш AppDelegate должен знать только о событиях приложения, а не о сокетах.
Я не знаю, как вы думаете, синглтоны стоят очень дорого. Единственный расход синглтона - ленивая инициализация объекта один раз при первом вызове.
С другой стороны, одноэлементный паттерн обычно считается плохой практикой из-за статического доступа к объекту, потому что вы ссылаетесь на одноэлементный класс вместо ссылки на экземпляр. Но, безусловно, лучше использовать синглтон вместо доступа к делегату приложения.