Crash s bloky a Core Motion

hlasů
1

Jsem pomocí push psovoda jádra Návrh aktualizací akcelerometru:

CMAccelerometerHandler accelerometerHandler = ^ (CMAccelerometerData *accelerometerData, NSError *error) {
    // handle update
};

[motionManager startAccelerometerUpdatesToQueue:[NSOperationQueue mainQueue]
                                    withHandler:[[accelerometerHandler copy] autorelease]];

Tento kód se zhroutí. Pokud nemám zkopírovat blok vůbec jsem si přerušované havaroval při uspání / životopis. Mám-li odstranit autoreleaseto funguje dobře, ale myslím, že to bude produkovat únik.

Také jsem se snažil přiřadit blok na Ivar a poté jej uvolněte [motionManager stopAccelerometerUpdates]. Zhroutí stejně.

Jak přichází? Vždycky jsem si myslel jsem vyvážit jakýkoliv copy/ retains release/ autorelease?

Viz také: Kopírování bloků (tj kopírování do proměnných instance) v Objective-C

Položena 12/11/2010 v 16:35
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
1

Otázkou zde je vlastnictví celého bloku. Když si uvědomíte, že bloky jsou opravdu jen objekty by mělo být jasnější, jak to všechno potřebuje pracovat. Je potřeba zkopírovat blok haldy, ale pak je třeba ji léčit, stejně jako každý jiný objekt, který máte vlastnictví pryč. Je-li objekt, který nazývá kopii na bloku dealloced byste měli uvolnit své vlastnictví nad blokem.

Odpovězeno 12/11/2010 v 18:45
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more