назначить свойства, объекты ARC и Core Foundation

Изменить 2.

Благодарякругозор это сейчас работает. И я даже думаю, что понимаю почему :-)

Вот исправленная строка:

- (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!! :-)
}
Редактировать.

Я до сих пор не понимаю. Я попробовал предложение Чака:

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

Вот так:

@interface TopLeftSlidingView  ()

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

@end

И в тот момент, когда я воссоздаю 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 ;
}

Любая из трех закомментированных строк приводит к ошибке компилятора. Некомментированная строка компилируется, но генерирует предупреждение анализатора:

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

с последующим:

/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

Я просто не понимаю этого :(

Рассмотреть возможность:

@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

Все это компилируется (и, по-видимому, работает) нормально, за исключением того, что анализатор постоянно выдает предупреждения.

По сути, этот код говорит: «Пожалуйста, ARC, не пытайтесь делать что-либо вообще сcolorПожалуйста, относитесь к этому так же, как к другимassign свойство, будь то BOOL или CGFloat, я управляю памятью все самостоятельно! "

За исключением того, что АРК отказывается слушать меня и до сих пор жалуется!

Я прочитал много вопросов здесь о SO, но ни один из них, кажется, не решает эту проблему ...

Ключевым моментом здесь, и компилятор (хотя и не анализатор), похоже, согласен с этим, является то, что, объявив свойство `assign ', я утверждал, что справляюсь со всем этим самостоятельно ...

Значит, я ошибаюсь, но я просто не понимаю, почему ...

В чем дело?

Ответы на вопрос(1)

Ваш ответ на вопрос