przypisz właściwości, obiekty ARC i Core Foundation

Edytuj 2.

DziękiRozpoznać to teraz działa. I nawet myślę, że rozumiem dlaczego :-)

Oto zmieniona linia:

- (void) reCreatePath {
    CGMutablePathRef p = ::CGPathCreateMutable() ;

    ::CGPathMoveToPoint         (p, 0, TL.x, TL.y) ;
    // [snip]
    ::CGPathAddLineToPoint      (p, 0, BL.x, BL.y) ;
    ::CGPathCloseSubpath(p) ;


    self.path = p ;
    ::CGPathRelease(p) ;   // <<== THIS IS IT!! :-)
}
Edytować.

Nadal tego nie rozumiem. Próbowałem sugestii Chucka:

@property (nonatomic, strong) __attribute__((NSObject)) CGPathRef  path ;

Tak jak:

@interface TopLeftSlidingView  ()

@property (nonatomic, strong) __attribute__((NSObject)) CGPathRef  path ;

@end

W momencie, w którym odtwarzam CGPath:

- (void) reCreatePath {
    CGMutablePathRef p = ::CGPathCreateMutable() ;

    ::CGPathMoveToPoint         (p, 0, TL.x, TL.y) ;
    // [snip]
    ::CGPathAddLineToPoint      (p, 0, BL.x, BL.y) ;
    ::CGPathCloseSubpath(p) ;


//    self.path = (__bridge CGMutablePathRef) p ;
//    self.path = (__bridge_transfer CGMutablePathRef) p ;
//    self.path = (__bridge_retained CGMutablePathRef) p ;
    self.path = p ;
}

Każda z trzech skomentowanych linii powoduje błąd kompilatora. Linia bez komentarza się kompiluje, ale generuje ostrzeżenie o analizatorze:

/Users/verec/Projects/WordGame/WordGame/classes/TopLeftSlidingView.mm:211:26:
 Call to function 'CGPathCreateMutable' returns a Core Foundation object with
 a +1 retain count

śledzony przez:

/Users/verec/Projects/WordGame/WordGame/classes/TopLeftSlidingView.mm:225:5:
 Object leaked: object allocated and stored into 'p' is not referenced later 
 in this execution path and has a retain count of +1

Ja tego po prostu nie rozumiem :(

Rozważać:

@interface Test : NSObject

@property (nonatomic, assign) CGColorRef color ;

@end

@implementation Test

- (void) dealloc {
    if (self.color) {
        ::CGColorRelease(self.color) ;
        self.color = 0 ;
    }
}

- (id) init {
    if (self = [super init]) {
        self.color = ::CGColorRetain([UIColor blueColor].CGColor) ;
    }
    return self ;
}

@end

To wszystko kompiluje się (i wygląda na to, że działa) w porządku, z wyjątkiem tego, że analizator nadal wysyła ostrzeżenia.

W istocie to, co mówi ten kod, brzmi: „Proszę ARC, nie przejmuj się niczymcolor, traktuj to tak, jak traktujesz inneassign własności, czy to BOOL, czy CGFloat, zarządzam zarządzaniem pamięcią we własnym zakresie! "

Tyle że ARC nie chce mnie słuchać i wciąż narzeka!

Przeczytałem wiele pytań tutaj na temat SO, ale żaden z nich nie wydaje się rozwiązywać tego problemu ...

Kluczową rzeczą tutaj i kompilatorem (choć nie analizatorem) wydaje się być zgodna, czy przez zadeklarowanie właściwości `assign 'twierdziłem, że wszystko załatwię samodzielnie ...

Więc muszę się mylić, ale po prostu nie rozumiem dlaczego ...

Co jest nie tak?

questionAnswers(1)

yourAnswerToTheQuestion