Я работаю над приложением Objective-C. Там у меня есть этот фрагмент:
QString result;
NSString *tmp = nil;
tmp = [activeApp bundleIdentifier];
result = QString::fromNSString(tmp);
NSLog(@"activeApplicationBundleId 2");
if (tmp) {
NSLog(@"dealloc");
//[tmp dealloc]; // <--- this causes crash
}
else {
NSLog(@"do not dealloc");
}
return result;
Я не понимаю, почему он падает. Я проверил документацию от Apple, и bundleIdentifier является свойством, определенным с копией
@property(readonly, copy) NSString *bundleIdentifier;
Я также прочитал, что должен отвечать за освобождение строки. Почему это сбой?
Если я использую вместо:
NSRunningApplication* activeApp = [[NSWorkspace sharedWorkspace] frontmostApplication];
return QString::fromNSString([activeApp bundleIdentifier]);
Будет ли у меня утечка памяти из-за отсутствия освобождения строки NSString?
На всякий случай QString :: fromNSString
QString QString::fromNSString(const NSString *string)
Constructs a new QString containing a copy of the string NSString.
Заранее спасибо