UIImage APIリファレンスドキュメント:
initWithContentsOfFile:
指定されたファイルの内容を持つイメージオブジェクトを初期化して返します。iOS - ここでどのようにメモリが処理されているのですか?
- (id)initWithContentsOfFile:(NSString *)path
パラメータ
パス
ファイルへのパス。このパスには、イメージデータの種類を識別するファイル名拡張子を含める必要があります。この方法は、ファイルを見つけるか、その内容から画像を初期化できませんでした場合
戻り値 AnがUIImageオブジェクト、またはゼロを初期化します。このシナリオを考慮
、私はクラスがあると、それがどのクラスの拡張である可能性があります。ちょうど例えばUIImageを取った。今
@interface myImage : UIImage
{
BOOL isDefaultSet;
}
-(id)initWithDefaultImage;
@end
@implementation myImage
-(id)initWithDefaultImage
{
NSString *path = [[NSBundle mainBundle] pathForResource:@"someInvalidImage" ofType:@"png"];
idDefaultSet = YES;
return [self initWithContentsOfFile:path];
}
@end
//somewhere in other class:
NSString *path = [[NSBundle mainBundle] pathForResource:@"someInvalidImage" ofType:@"png"];
myImage *myObject = [[myImage alloc] initWithDefaultImage];
UIImage *yourObject = [[UIImage alloc] initWithContentsOfFile:path];
ここでどちらの場合も、
"アロケーションは、" "retainCount + 1"
と返さ
initWithDefaultImage/initWithContentsOfFile
場合を与えます原因はありませんいくつかの問題 - 。(無効なファイルのパスを)言うことができますが、このメモリは
myObjectという/ yourObject
としてリークされます割り当てが初期化前に行われたにもかかわらず、nilに設定されます。
私は、このように拡張クラス/インタフェースの多くの実装を見てきました。私はメモリがここでどのように扱われているのか混乱していますか?誰もこれについての見解を共有できますか?
慣例に従い、クラスを大文字で始めることを提案します。あなたはあなたの人生をより楽にしてくれるでしょう(もしあなたが他の人と働いているなら、あなたは侮辱されて殴られることを避けます;-) – DarkDust
親愛なるダークダスト..私はこの問題について議論しています。あまりにも厳しくはありません..! – samfisher
ダークダストが冗談を言っていたと思う。 DarkDustは正しいですが、私は難しい方法を学んだので、クラスは大文字にする必要があります。ivarsとメソッドは小文字で始まります。 – johnbakers