W mojej klasie mam nieruchomość dispatch_queue_t
zadeklarowane tak:Awaria aplikacji po aktualizacji Xcode do wersji 4.5. Przypisywanie zatrzymany obiekt do unsafe_unretained zmiennej
@property (nonatomic, assign) dispatch_queue_t queue;
Wtedy w mojej metody init, robię:
- (id)initWithServerUrls: (NSString*)serverUrls
{
if (self = [super init])
{
_queue = dispatch_queue_create("com.xxx.my_send_queue", DISPATCH_QUEUE_SERIAL);
}
return self;
}
W Xcode 4.4.1 to działało i nie spowodowało żadnych problemów (testowana aplikacja + w appstore). Teraz po uaktualnieniu do Xcode 4.5 awarii aplikacji z EXC_BAD_ACCESS i Xcode daje mi ostrzeżenie na tej linii, mówiąc:
Przypisywanie zatrzymany obiektu do zmiennej unsafe_unretained; obiekt zostanie zwolniony po przydzieleniu
Apple zaktualizował kompilator w Xcode 4.5 z LLVM 4.0 do LLVM 4.1, ale nie mam pojęcia, dlaczego mój kod się teraz psuje.
Przeszedłem przez kod i katastrofa zdarzyła się tuż po tej linii. Czy masz pomysły, co może być nie tak i jak mogę to naprawić?
ROZWIĄZANIE:
udało mi się dostać pracy z obu SDK. Właśnie dodałem:
#if OS_OBJECT_USE_OBJC
@property (nonatomic, strong) dispatch_queue_t queue; // this is for Xcode 4.5 with LLVM 4.1 and iOS 6 SDK
#else
@property (nonatomic, assign) dispatch_queue_t queue; // this is for older Xcodes with older SDKs
#endif
nadzieję, że ktoś uzna za przydatne
self._queue = dispatch_queue_create ... czy to naprawia? - dodanie "siebie." –
Nie, wciąż to samo, zawiesza się, Ostrzeżenie też jest tam: – RaffAl
niż" Przypisanie zatrzymanego obiektu "oznacza wynik z dispatch_queue_create (... i" do niebezpiecznej_tej zmiennej "to znaczy _ueue. A jeśli @synthetize nie robi" t rozwiązać (ponieważ jest on na Constructor) niż jakoś trzeba manipulować dispatch_queue_create (zwracana wartość, czy można umieścić ten obiekt, co on zwraca? –