2012-04-12 6 views
0

iOS 4.x向けのプロジェクトがあります。最近、Xcode 4.3.2を使ってiOS5にアップデートしています。アップルのLLVMコンパイラを使用しているときにダブルフリーエラーで毎回アプリが停止するのは不思議です。私はLLVM GCCに戻った後、正常に動作します。この2つの間に違いはありますか? コードを以下に示します。Apple LLVMコンパイラを使用したときにダブルフリーエラーが発生する

- (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]; 

    } 

} 

をより多くの私はそれが本当に重要

lectureModel.location = [lectureDic objectForKey:kKeyWhere]; 

だということが分かったトレースで。私LectureModelで 、場所は

@property (nonatomic, retain) NSString *location; 

@synthesize location; 

- (id)init { 
    location = NSLocalizedString(@"未知", nil); 
} 

がNSLocalizedStringを削除に従い、すべてがすべての権利作品として宣言されています。 なぜですか?

+4

ダブルフリーはどのラインで起こりますか? – JeremyP

+0

どのラインが重要かわかりません。それは単にxcodeの_pthread_killで停止し、これらのコードをコメントアウトすると機能します。 –

答えて

0

通常、NSDictionaryとお考えの場合、objectForKey:の代わりにvalueForKey:を使用しますが、ここでは問題はないと思います。それをLLVMに戻し、 "ゾンビ"でインストゥルメントを実行すると、各空き(井戸、解放)がどこに発生しているかを正確に指し示すべきです。

+2

私は '-valueForKey:'を使うのに同意しません。 '-objectForKey:'は 'NSDictionary'のネイティブインタフェースです。 '-valueForKey:'はKVCの追加です。それは、キーが文字列でなければならないなど、付加的な制限と同様に望ましくない可能性がある追加の機能を備えています。 –

+0

ケン、私は正しかった。あなたは絶対に正しいです。私は元の答えに投票したが、自分の答えに投票することはできない。私はゾンビの指示に立つ。 –

+0

ああ、私は間違いなく、ゾンビ機器を使用してメモリ管理エラーを追跡する提案に同意します。 :) –

関連する問題