Вызов функции делегата и возврат результата

Я делаю небольшой тестовый проект с 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 должен знать только о событиях приложения, а не о сокетах.

Я не знаю, как вы думаете, синглтоны стоят очень дорого. Единственный расход синглтона - ленивая инициализация объекта один раз при первом вызове.

С другой стороны, одноэлементный паттерн обычно считается плохой практикой из-за статического доступа к объекту, потому что вы ссылаетесь на одноэлементный класс вместо ссылки на экземпляр. Но, безусловно, лучше использовать синглтон вместо доступа к делегату приложения.

Другие вопросы по тегам