Also, unless I'm missing something, the last print should say Data, not Mutable Data in this sample code:
#import <Foundation/Foundation.h>
void printKindOfClass(id inObject)
{
if ([inObject isKindOfClass:[NSMutableData class]]==YES)
NSLog(@"Mutable Data");
else if ([inObject isKindOfClass:[NSData class]]==YES)
NSLog(@"Data");
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSData * tData=[NSData dataWithContentsOfFile:@"/bin/ls"];
printKindOfClass(tData);
NSMutableData * tMutableData=[tData mutableCopy];
printKindOfClass(tMutableData);
tData=[tMutableData copy];
printKindOfClass(tData);
// Here comes a bug
NSData * tBookmarkData=[[NSURL fileURLWithPath:@"/bin/ls"] bookmarkDataWithOptions:0 includingResourceValuesForKeys:@[] relativeToURL:nil error:NULL];
printKindOfClass(tBookmarkData);
tData=[tBookmarkData copy];
printKindOfClass(tData); // <--- Here is a bug
}
return 0;
}
2019-09-26 15:34:10.146480+0200 FoundationHasFallen[91673:242685] Data
2019-09-26 15:34:10.146697+0200 FoundationHasFallen[91673:242685] Mutable Data
2019-09-26 15:34:10.146735+0200 FoundationHasFallen[91673:242685] Data
2019-09-26 15:34:10.151079+0200 FoundationHasFallen[91673:242685] Mutable Data
2019-09-26 15:34:10.151098+0200 FoundationHasFallen[91673:242685] Mutable Data