2
4

2 に答える 2

3

私も同じ問題を抱えていました。これがコードを最適化した方法です。

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;
于 2011-01-25T16:20:56.850 に答える
2

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になっていると思います。これらの変更を行ってから、アプリをクラッシュさせることができなくなりました。autoreleasebackgroundColor

私はこれを言う必要があります: C++ がそれを完全に正しく行うとは思いませんが、C# と Java はどちらも、この複雑なリリース、自動リリース、@property ビジネスなしで非常にうまく管理します。もちろん、誰かが (Objective-C に似た) ポインター管理システムを Java や C# で実装したい場合は実装できますが、もちろん、それはかなり役に立たないため、誰もこれを望んでいません。Apple さん、Objective-C から移行してください!

于 2011-01-26T03:53:56.463 に答える