У меня очень странная проблема с очень простым «демонстрационным» приложением.
По сути, проблема в том, что если я сделаю вызов метода класса с одним аргументом, и этот метод сразу же вернется, но у него будут переменные, определенные после возврата (см. Ниже), то стек вызовов будет поврежден, а некоторые другие переменные изменены ... Я знаю, что это звучит безумно, но вот код ...
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[self.window makeKeyAndVisible];
NSError *er=[MLRESTRequest test:nil]; //<- this line modifies the "application" variable passed as first argument!
return YES;
}
@implementation MLRESTRequest
+ (NSError*) test:(id)task
{
return nil;
NSURLResponse *responseHeaders=nil;
NSDictionary *responseHeadersDict=nil;
NSError *error=nil;
NSData *result=nil;
NSURL *urlToCall = nil;
NSMutableURLRequest *urlRequest=nil;
NSString *serverRequest=nil;
NSString *cookie=nil;
NSString *server=nil;
NSString *port=nil;
NSString *call=nil;
//return nil;
}
@end
Если я переместу возврат в конце метода «test», тогда все в порядке ...
Редактировать: я публикую изображения проблемы в комментариях
Edit2: я заново создал образ Mac и установил свежую копию xCode 3.2.6 - проблема исчезла. К сожалению, через несколько дней у меня начались подобные проблемы ... (переменная стека изменяется безо всякой причины после возврата из вызова функции) ... Я перекомпилировал точно такой же код на 3.2.5 и 4.0, и проблема снова исчезла ... Я не знаю, что делать, но пока буду держаться подальше от 3.2.6
.
Edit3: Если кто-то все еще интересуется этим случаем - у меня есть доказательства того, что GCC 4.2, используемый в 3.2.6, глючит - если используется LLVM + GCC 4.2, то не происходит сбой