5

私はこのコードをARCで使用しています:

NSMutableDictionary *datesDict = [[NSMutableDictionary alloc]init];
NSMutableArray *datesArray = [[NSMutableArray alloc]init];

for (NSString *key in programsArray) {

    datesArray = [_onDemandDictionary objectForKey:key];
    NSMutableArray *newDates = [[NSMutableArray alloc]init];
    int count;
    for (count = 0; count <datesArray.count; count++) {
        NSMutableDictionary *programsDict = [[NSMutableDictionary alloc]init];
        programsDict = [datesArray objectAtIndex:count];
        [newDates addObject:[programsDict objectForKey:@"date"]];

    }

    [datesDict setObject:newDates forKey:key];
}

しかし、アナライザーツールを実行すると、初期化中に値が(datesArrayおよびprogramsDict)に格納され、行で読み取られることはありません。

NSMutableArray *datesArray = [[NSMutableArray alloc]init];
programsDict = [datesArray objectAtIndex:count];

なぜこれが起こっているのですか?どうすれば警告を隠すことができますか?

ありがとうございました!

4

3 に答える 3

19

問題は、新しいものを作成し、最初NSMutableArrayに割り当てることですdatesArray

NSMutableArray *datesArray = [[NSMutableArray alloc]init];

datesArray次に、とに完全に異なる値を割り当てた直後

datesArray = [_onDemandDictionary objectForKey:key];

私はただ始めます

NSMutableArray *datesArray = nil;

の同じ概念ですprogramsDict

于 2012-11-14T15:45:20.660 に答える
2

2行目で、新しい配列を作成しますdatesArray
次に、6行目(forループの最初の行)で、新しい値をに設定しますdatesArray

コンパイラは、2行目は効果がなく、コードにバグがあることを警告しているだけです(ある意味では、期待どおりに動作しません)。
確かに、はprogramsArray空の配列である可能性があります。この場合、datesArray表示したスニペットの後に使用するように初期化する必要がありますが、これを明示的にすることをお勧めします。

の場合programsDict、さらに簡単です。で初期化し... alloc] init]てから、のオブジェクトに設定するとdatesArray、最初の操作が役に立たなくなります。

于 2012-11-14T15:51:40.423 に答える
0

ループでdatesArrayを使用しておらず、単に値を割り当てているだけなので、次のようにnil配列を取得します。

NSMutableArray* datesArray = nil;

または好き

NSMutableArray *datesArray;

警告を削除します。

于 2016-06-20T19:11:23.217 に答える