• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【objective-C】ARCでのメモリ軽量)

Objective-CのARCでメモリ使用量を軽量化する方法とは?

このQ&Aのポイント
  • Objective-CのARCを使用している場合、retainやreleaseを自分で行うことができません。
  • ARCを使用しているにもかかわらず、メモリ使用量が高く、アプリの提出がリジェクトされることがあります。
  • ARCを使用する際にメモリ使用量を軽量化するためのコーディング方法や、参考になるサイト、Instrumentsの使い方を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
noname#177743
noname#177743
回答No.1

ARCは、AutoReleasePoolをシステムが自動管理するため、AutoReleasePoolそのものをプログラマ側で使えなくなります。従って、retain/releaseも使えません。(というか、下手に使うとARCのリファレンスカウントが狂ってメモリ管理が正しく行えなくなるでしょう) ARCが原因でメモリ量が増大している、とはちょっと考えにくいのですね……。一般に、ARCにすればretain/releaseが効率的に行えるようになるため、ARC非使用時よりはメモリ使用量も動作速度も若干よくなると思うのです。何か他に原因があると思うのですが……。 ARCでもメモリリークは発生する可能性がありますのでそのへんに原因はないでしょうか。あるいは巨大なグラフィックイメージなど多用していますか。そのあたりのメモリを食いそうなデータ部分を見直す、ぐらいしか思いつかないんですが……。

lunemoon
質問者

補足

ありがとうございます。 Instrumentsで見たらリークはありません。 画像データは一切しようしていません。 本当に打つ手無しです。。。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Objective-Cで、NSStringのオブジェクトの解放を行って

    Objective-Cで、NSStringのオブジェクトの解放を行っているサンプルをよく見るのですが NSString *s = @"test"; const char *p = [s UTF8String]; [s release]; ... ここでpにアクセスするとどうなるのでしょうか? [s release]とおおもとを解放しているので怪しいと思いますがそれは正しいでしょうか? あと関数内なら [s release]としなくても自動解放?(ガーベージコレクション) はしてくれるのでしょうか? Objective-Cでのメモリの有効期間や解放について詳しくかかれている本やサイトの情報も探しています。

    • ベストアンサー
    • Mac
  • iphoneの軽量化

    iphoneの軽量化 最近iphoneのOSを4にするとすごく重くなってしまってすごく不便になってしまいました。 使っているiphoneは3Gなのでメモリが足りなくなってしまったのかなと思っています。 メモリの使用量を調べるアプリを見てみると、固定されたメモリはあまり増えていないのですが、その他という項目が増えていました。 空きメモリは大体3分の2くらいに減っています。 このためインターネットにつなげても遅く、キーボードを出して入力をはじめるまでに10秒くらいかかってしまうときもあります。 iphoneのダウングレードはできないので、ダウングレード以外で軽量化する方法がありましたら、教えていただきたいです。

  • メモリの掃除屋さんの設定について。

    メモリの掃除屋さんを使用してますが、設定で、通常と軽量が在りますが、 どのように理解してよいのでしょうか。私は、このソフトの消費メモリ量の事じゃないかって思ってます。それなら、軽量の方が負担が軽いだろうと思い、軽量で使ってますが、これで善いのでしょうか。(m。_。)m よろしくオネガイシマース

  • AH55/Cのメモリ増設…

    現在富士通のAH55/Cを使っているのですが、USTなどで配信する際にメモリの使用量がギリギリになるためメモリ増設をしようと思っています。 ですが、富士通のサイトや別の周辺機器を扱っている会社のサイトを見ても対応するメモリが見つかりませんでした。 どなたか増設用のメモリを販売しているサイト、メモリの製品名などを教えていただけませんでしょうか? PCの型名:FMVA55CRF

  • [objective-C]配列について

    はじめまして。 objective-C、cocos2dについての質問です。 iPhoneアプリを勉強しながら作り始めたのですが詰まってしまい、できればご助力をお願いしたいと思い質問させていただきました。 cocos2dというフレームワークを使用し簡単なRPGを作りたいと考えております。 そこでキャラクターのステータスを配列に格納し、どのシーンからも参照したいのですが、どうしてもうまくいきません。 別クラスでインスタンス変数を作り、それを利用して配列を作成する方法で実装しようとしており、実際のコードは以下の通りになります。 ---------------------------------- <Character.h> @interface Character : NSObject{ NSInteger characterStateAtk_; ・(Def、Hpなど) ・ } @property (nonatomic, assign) NSInteger characterStateAtk;  ・  ・ @end <Character.m> #import "Character.h" @implementation Character @synthesize characterStateAtk = characterStateAtk_;  ・  ・ @end キャラクターステータス生成部分 <CreateScene.h> @interface CreateScene : CCScene { NSMutableArray* characterStateArray_; } @property (nonatomic, assign) NSMutableArray *characterStateArray; @end <CreateScene.m> @interface CreateScene() - (void) pressReloadButton:(id)sender; - (void) createCharacterState; @end @implementation CreateScene @synthesize characterStateArray = characterStateArray_; - (void) dealloc{ [self.characterStateArray release]; [super dealloc]; } - (void) createCharacterState{ self.characterStateArray = [NSMutableArray array]; Character* priState = [[[Character alloc]init] autorelease]; priState.characterStateAtk = random() % 5 + 5; ・ ・ [self.characterStateArray addObject:priState]; } (その他の処理) - (void) pressReloadButton:(id)sender{ [self createCharacterState];  (ここでcharacterStateArrayを取得して表示したい) } ---------------------------------- 最初は、 NSInteger x; x = [[self.characterStateArray objectAtIndex:0]intValue]; で取得しようとしたのですがエラーとなり実行できませんでした。 (調べていくうちにobjective-Cでは配列の中身はオブジェクトしか使えないという事を知りました) プログラム中の(ここでcharacterStateArrayを取得して表示したい)の部分について、実装方法や考え方についてご助言をいただけないでしょうか? よろしくお願いいたします。

  • メモリ使用量が多い

    常駐アプリを全部外してもメモリ使用量が130MBぐらいなのですが、これは Win2kなら普通なのでしょうか? もしそうでないとしたら、何故使用量が多くなっているのでしょう? また、メモリ使用量を減らす良い方法があったらおねがいします。 ちなみに、実装しているメモリ容量は128×2の256MBです。

  • android メモリの空き容量を増やしたい

    androidタブレットについてです メモリの使用量をGOタスクマネージャを使って調べてみたところ、 RAMは1Gあるのですが空き容量が150Mほどしかありませんでした。 同アプリについているタスクキルなんかをしてみてもせいぜい50~60Mほどしか空き容量が増えず、 またすぐにアプリが起動するため実質的に変わりません。 アプリのメモリ使用量なんかをどう見てもそんなに使ってはいません。 何に700~800Mも使っているのでしょうか?

  • GalaxyNote2の空きメモリ

    どうにもよくわからないことがあるので質問させてください。 GalaxyNote2は、メモリが2GBあります。 購入して数日、それほどたくさんのアプリやウィジェットを追加した わけではありません。(メモリ512MBの旧スマホと同程度) ですが、空きメモリを確認すると、400MB前後と、常に75%以上 消費しています。 高級タスクマネージャとZDBoxを入れて、タスクキルやキャッシュの解放 なども頻繁に行っていますが、せいぜい一時的にメモリ使用量が60%ぐらい になるだけで、またすぐ70~80%の使用量まで戻ってしまいます。 メモリ2GBの当機種で3/4まで使っているということは、メモリが1GB以下の 機種では足りなくなる計算ですが、そういうスマホにもそれ以上のアプリや ウィジェットを入れて使っていました。 このあたり、どのように理解すればいいのか、ぜひ教えてください。

  • [Objective-C] 連番スプライト定義

    こんにちは。 Objective-CのCocos2dフレームワークで簡単なテスト用アプリを製作中なのですが、 以下の様なスプライト定義をs1.png、s2.png、s3.png、s4.png、・・・といった連番画像でそれぞれで行いたいと考えています。 //■■■ レイヤーAを作成 ■■■ CCLayer *layerA = [CCLayer node]; [self addChild: layerA]; CGSize winSizeSprite = [[CCDirector sharedDirector] winSize]; //スプライトS1を生成 CCSprite *sampleSpriteS1 = [CCSprite spriteWithFile:@"s1.png"]; sampleSpriteS1.position = CGPointMake(winSizeSprite.width/2, winSizeSprite.height/2);   ・   ・   ・ [layerA addChild:sampleSpriteS1];//レイヤーAに追加 この「スプライト定義」から「レイヤー追加」までの処理を大量の画像について一括で行いたい場合、for文などを使用して条件式のiの値をファイル名やインスタンス変数の「S●」の部分に利用出来そうな気がするのですが、ダイレクトな説明の載っている参考書やWEBサイトが見つからず、具体的な記述法がわかりません。 当方、PHPについては多少の編集経験があるのですが、プログラミングについてはObjective-Cが初めてです。 上記記述法ご存知の方、ご教示頂けませんでしょうか。 宜しくお願い致します。

  • メモリパワーについて

    タスクマネージャのパフォーマンスタブで「メモリ使用量」というところがありますが、 そこの値が物理メモリの4分の1程度の数値しか表示されません(物理メモリ:2GB、表示:約450MB)。 「これは4分の1しかパワーを使っていませんよ」ということでしょうか? メモリを最大限使う設定・1つのアプリにメモリを多く割り当てるなどの方法はありませんか?