xcode ARC conversion error [CFString retain] crash

2019-01-27 08:10发布

问题:

I converted my huge IOS program to ARC using xcode auto conversion. After that I am getting the following error: [CFString retain]: message sent to deallocated instance

The trace shows the following line where it crashed:

UIImage *image = [[UIImage alloc] initWithContentsOfFile:tile.imagePath];

Next line in the trace gives:__arclite_objc_retainAutoreleasedReturnValue at /SourceCache/arclite/arclite-7.1/source/arclite.m:241

Can someone suggest me where I can look further, or what can I do to remove this crash?

Thanks a lot

EDIT: Looks like the (NSString *)p initialization in the code below needs some changes. How should I change it, so that the tile.imagePath doesn't become null?

- (id)initWithFrame:(MKMapRect)f path:(NSString *)p{
    if (self = [super init]) {
        imagePath = p;
        frame = f;
    }
    return self;
}

Thank you.

回答1:

imagePath is probably a __unsafe_unretained iVar (or maybe you're seeing weak or assign). Change it to strong so that it is retained by ARC.