"Как хорошая практика, я хочу поместить их в отдельный файл каждый".
Это не на самом деле очень хорошая практика. Необходимо разработать модули, которые содержат тесно связанные классы.
На практике, никакой класс на самом деле не стоит абсолютно один. Обычно классы существуют кластеров или групп, которые логически связаны.
Вы почти никогда не захотите этого делать , типичным исключением является случай, когда вы хотите передать ссылку в качестве аргумента, который может быть заполнен. См. использование (NSError **)
во всех API.
В частности, вы делаете not хочет объявить переменную экземпляра как NSConnection **
, а затем установить ее в другом месте; где-то вне объекта. Это полностью нарушает инкапсуляцию и является верным признаком того, что ваш код плохо или, по крайней мере, странно разработан.
Попробуйте вместо этого:
@interface MyClass:NSObject
{
NSConnection *connection;
}
@property(retain) NSConnection *connection;
@end
@implementation MyClass
@synthesize connection;
@end
И в любом классе / коде, который должен установить соединение:
@implementation SomeOtherClass
- (void) configureConnection: (MyClass *) anObject
{
NSConnection *aConnection;
aConnection = ... initialize the connection ...
anObject.connection = aConnection;
}
@end
Это сохранит инкапсуляцию и позволит чему-то еще установить соединение для MyClass. Если это не решит вашу проблему, вам нужно будет сообщить нам, что вы действительно пытаетесь сделать.
Вы назначаете значение указателя conn для primaryConnection , прежде чем установить conn , поэтому conn ] и, таким образом, primaryConnection , вероятно, будет указывать на мусор.
Имейте в виду, что вы должны сохранить объект NSURLConnection перед сохранением его в качестве переменной экземпляра, иначе объект, вероятно, будет освобожден слишком рано. Поэтому освободите старое primaryConnection , а затем назначьте ему новый объект, но также сохраните новый объект.
Вам нужно установить его на соединение после того, как соединение будет установлено там, где вы хотите.
Объявите это как:
NSURLConnection **primaryConnection;
Задайте это как:
primaryConnection = &conn;
Это простой материал C, а не специфический для Objective-C. Чтобы получить доступ к primaryConnection, вам необходимо разыменовать его перед отправкой ему сообщений:
NSURLConnection * theConn = *primaryConnection;
[theConn doSomethingElse];
Обратите внимание, хотя из вашего исходного кода, который вы вставили, это может быть небезопасно. Похоже, вы хотите иметь doSomething
в одном потоке, обращаясь к локальной переменной, и используете primaryConnection
из других потоков, чтобы получить ссылку на эту локальную переменную? Почему бы просто не сделать ее обычной переменной экземпляра?