3

このコードが2番目のアサートでどのような状況で壊れるのか疑問に思っています。言い換えれば、いつ-[UIImage CGImage]戻ることができnilますか?ドキュメントはここではあまり語っていません。

- (void)setImage:(UIImage *)anImage {
    assert(anImage);
    CGImageRef cgimage = anImage.CGImage;
    assert(cgimage);
}

UIImage は app bundle からフェッチされるため、正しいと確信しています。これまでのところ、このケースを再現することはできませんでしたが、いくつかのユーザー クラッシュ レポートが表示されます。

4

4 に答える 4

6

ドキュメントで遭遇したもう1つの可能性:

UIImage オブジェクトが CIImage オブジェクトを使用して初期化された場合、プロパティの値は NULL です。

于 2014-12-18T21:38:57.583 に答える
2

もう 1 つの可能性は、複数のスレッドが同時に同じ UIImage オブジェクトにアクセスしていることです。これは私のコードで同じ症状で起こっていました。

アクセスパターンは実行ごとに変化するタイミングに依存するため、散発的なクラッシュレポートもこれで説明できるかもしれません。

于 2012-06-14T18:38:43.380 に答える
1

私の知る限りでは、最初のアサートがパスした場合 (anImage が nil ではないことを示す)、画像を読み込めなかったことを意味します。イメージがバンドルにコピーされていることを確認してください。

于 2011-03-28T17:00:59.410 に答える
1

anImage非 nil であるが nil になるケースはcgimage、次のように考案できます。

UIImage* myImage = [[UIImage alloc] initWithCGImage:nil];

以前の回答が示したように、そのようなシナリオで自分自身を見つけることができる他の方法があります。

于 2011-03-28T17:06:24.913 に答える