Ich habe ein Projekt für iOS 4.x geschrieben. Kürzlich habe ich es mit XCode 4.3.2 auf iOS5 aktualisiert. Es ist seltsam, dass die App jedes Mal mit doppeltem freiem Fehler stoppt, wenn Apple LLVM Compiler verwendet. Nachdem ich zurück zu LLVM GCC gewechselt habe, funktioniert es gut. Gibt es einen Unterschied zwischen diesen beiden? Der Code ist unten dargestellt:Doppelfreier Fehler bei der Verwendung von Apple LLVM Compiler
- (NSArray *)readCourselist {
NSString *path = [[self currentUserPathString] stringByAppendingPathComponent:kUserCourseListFilename];
return [NSArray arrayWithContentsOfFile:path];
}
- (NSArray *)getCourselist {
NSArray *courseRawArray = [self readCourselist];
for (NSDictionary *courseDic in courseRawArray) {
CourseModel *courseModel = [[CourseModel alloc] init];
courseModel.courseID = [[courseDic objectForKey:kKeyID] intValue];
courseModel.courseNameString = [courseDic objectForKey:kKeyTitle];
NSArray *lectureArray = [courseDic objectForKey:kKeyLecture];
for (NSDictionary *lectureDic in lectureArray) {
LectureModel *lectureModel = [[LectureModel alloc] init];
NSString *startString = [lectureDic objectForKey:kKeyStart];
if ([startString isEqualToString:@"8:00"]) {
lectureModel.lectureNumber = 1;
}
else if ([startString isEqualToString:@"9:50"]) {
lectureModel.lectureNumber = 2;
}
lectureModel.location = [lectureDic objectForKey:kKeyWhere]; //@property of location is retain
[courseModel.lectureArray addObject:lectureModel];
[lectureModel release];
}
[courseArray addObject:courseModel];
[courseModel release];
}
}
Mit mehr Tracing ich fand heraus, dass es
lectureModel.location = [lectureDic objectForKey:kKeyWhere];
die wirklich zählt. In meinem LectureModel wird Standort erklärt als
folgen@property (nonatomic, retain) NSString *location;
@synthesize location;
- (id)init {
location = NSLocalizedString(@"未知", nil);
}
löschen NSLocalizedString und alles funktioniert gut. Warum?
In welcher Zeile passiert das doppelte frei? – JeremyP
Ich habe keine Ahnung, auf welche Zeile es ankommt. Es stoppt einfach in einem _pthread_kill in xcode, und wenn ich diese Codes auskommentiere, funktioniert es. –