2 に答える
私も同じ問題を抱えていました。これがコードを最適化した方法です。
Instruments での分析とデバッグの後、colorwith パターンが ripl_create と呼ばれる責任あるライブラリで 1.12 MB を占有することがわかりました。colorWithPattern を使用した各画面では、同じ 1.12 が占有されるため、1.12 MB の倍数が割り当てられます。これは私のアプリを吸った.だから私はNo colorWithPatternに決めた.
ビューの背景に画像を設定したいと思います。私が提案するのは、ImageViewを保持し、それに画像を配置することです...
imageView の最適化について
アプリの多くの部分で画像を使用したい場合、または画像を含むビューに頻繁にアクセスする場合は、imagenamed を使用します。
imageNamed は画像をキャッシュし、nil または解放しても解放しません。
その他、画像を公開したい場合
あなたのviewWillAppearまたはviewDidLoadで画像をimageviewに割り当てます
NSString *fileLocation = [[NSBundle mainBundle] pathForResource:@"yourImage" ofType:@"png"];
imageView.image = [UIImage imageWithData:[NSData dataWithContentsOfFile:fileLocation]];
inYour viewDidDisappear を nil に設定して画像を解放します
imageView.image=nil;
OK、(タグ付けとタイトルが不十分な)SOの質問/回答hereのおかげで、私は何かを解決しました。私がする必要があったのは、 について読むことでしたUIView.backgroundColor
。私のドキュメントでは、それは言う@property(nonatomic, copy) UIColor *backgroundColor
. ここでの「コピー」は、私が次のようなことを言うと、次のことを示しています。
myUIView.backgroundColor=[[UIColor alloc]initWithPatternImage:myUIImage];
はmyUIView.backgroundColor
実際には とは別のオブジェクト[[UIColor alloc]initWithPatternImage:myUIImage]
です。実際、このセパレートmyUIView.backgroundColor
は自動的に解放されるので、[myUIView.backgroundColor release];
実際に行くと自分の足を撃っています。私がする必要があるのは:
UIColor* tmpColor=[[UIColor alloc]initWithPatternImage:myUIImage];
currentPage.backgroundColor=tmpColor;
[tmpColor release];
(そしてもちろん、その周りで、割り当てと解放も行っていmyUIImage
ます)。scrollView patternImage をリリースするには、currentPage.backgroundColor=nil;
(@BuildSucceeded など) またはcurrentPage.backgroundColor=[UIColor clearColor];
(実際的な違いがあるかどうかはわかりません) のようなことを行うだけです。内部的には、これらの両方が古い原因currentPage
になっていると思います。これらの変更を行ってから、アプリをクラッシュさせることができなくなりました。autorelease
backgroundColor
私はこれを言う必要があります: C++ がそれを完全に正しく行うとは思いませんが、C# と Java はどちらも、この複雑なリリース、自動リリース、@property ビジネスなしで非常にうまく管理します。もちろん、誰かが (Objective-C に似た) ポインター管理システムを Java や C# で実装したい場合は実装できますが、もちろん、それはかなり役に立たないため、誰もこれを望んでいません。Apple さん、Objective-C から移行してください!