Arc-ObjC объекты с переменными экземпляра CF
Я думаю, что здесь я-костяная голова...
Статический анализатор жалуется в методе -(void)doSomethingInteresting
:
Потенциальная утечка объекта, хранящегося в myAddressBook
Ну, конечно, это имеет смысл; я вызываю функцию create
без соответствующего release
. Но я не думаю, что хочу выпустить myAddressBook
в конце -doSomethingInteresting
, потому что я хочу, чтобы он оставался в течение всей жизни AwesomeObject
пример.
AwesomeObject.h
@interface AwesomeObject : NSObject
@property (assign, nonatomic) ABAddressBookRef addressBook;
@end
AwesomeObject.m
@implementation AwesomeObject
- (void)doSomethingInteresting
{
CFErrorRef error = NULL;
ABAddressBookRef myAddressBook = ABAddressBookCreateWithOptions(NULL, &error);
[self setAddressBook:myAddressBook];
}
@end
Правка: снимок экрана прилагается
2 ответа:
Анализатор не понимает, что вы хотите присвоить сохраненную адресную книгу в свою собственность и, таким образом, не выпускать ее в конце
doSomethingInteresting
.Измените свое свойство на:
@property (strong, nonatomic) id addressBook;
И установите его следующим образом:
Теперь, когда вы хотите использовать свойство[self setAddressBook:CFBridgingRelease(addressBook)];
addressBook
, Используйте приведение(__bridge ABAddressBookRef)
.Кроме того, вам нужно освободить потенциальный объект
CFErrorRef
, который, возможно, был создан во времяABAddressBookCreateWithOptions
:if(error) { CFRelease(error); error = NULL; }