Я получаю следующую ошибку:
int main(int argc, char *argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
int retVal = UIApplicationMain(argc, argv, nil, nil); //breakpoint that says Thread 1: Program Received Signal: "EXC_BAD_ACCESS".
[pool release];
return retVal;
}
Мои два вопроса можно найти внизу этого сообщения:)
В настоящее время я работаю над заданием для iOSкласс программирования и ударил дорожный удар.
Я нашел исправление, показанное ниже, но оно не имеет смысла для меня.Проверьте это:
@implementation MyClass
// This class method takes an (NSMutableArray *) and returns an NSString with its contents printed out.
+ (NSString *)myString:(NSMutableArray)anArray
{
// NSString *myString = [[NSString alloc] init]; OLD CODE THAT CAUSES MEMORY LEAK
NSString *myString = [[[NSString alloc] init] autorelease]; //NEW CODE THAT RELEASES FIRST ALLOCATION OF myString WHEN THE FIRST stringByAppendingFormat: IS CALLED
NSString *vp = VARIABLE_PREFIX; //#defined above to be @"%
for (id object in anArray) {
if ([object isKindOfClass:[NSString class]]) {
if ([object hasPrefix:vp]) {
myString = [myString stringByAppendingFormat:@"%@",[object substringFromIndex:1]];
}else{
myString = [myString stringByAppendingFormat:@"%@",object];
}
}else if ([object isKindOfClass:[NSNumber class]]) {
myString = [myString stringByAppendingFormat:@"%@",object];
}
}
return myString; //shouldn't I autorelease myString right before this line? NO NOT ANY MORE. THIS myString IS NOT THE ORIGINAL THAT I alloc-init, BUT AN AUTORELEASED OBJECT RETURNED BY THE stringByAppendingFormat: message.
}
Когда я пытаюсь отправить сообщение [myString autorelease];
, программа вылетает с вышеуказанной ошибкой.Теперь он работает нормально, как показано выше, но я не понимаю, почему.
Каждый раз, когда я отправляю сообщение, содержащее «волшебные слова» alloc, init, copy
Мне нужно позвонить release
, это не так?Или правила метода различаются (может ли сам класс иметь файл?).Я не вызываю retain
в объекте, который вызывает этот файл.
Вот мои два вопроса:
Почему происходит сбой при попытке освободить theDescription
используя autorelease
?
Мой код создает утечку памяти?
Это мой самый первый вопрос о переполнении стека!Спасибо за вашу помощь!