みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Objective-Cのメモリ管理

はじめまして。

iphoneアプリを作っていてメモリ管理について不明な点があるので教えて下さい。

memoryViewController.h
==============================================
#import <UIKit/UIKit.h>

@interface memoryViewController : UIViewController {
id obj;
}
@property(retain)id obj;
@end
===============================================

memoryViewController.mm(一部)
===============================================
@implementation memoryViewController
@synthesize obj;

- (void)viewDidLoad
{
[super viewDidLoad];


self.obj = [[NSObject alloc] init];
NSLog(@"count = %d", [obj retainCount]);
}
===============================================
下記の部分についてです。
self.obj = [[NSObject alloc] init];

「self.」を付けた場合retainCountは2で、付けなかった場合retaionCountは1になります。
何故違ってくるのかが理解できません。
教えて下さい。

投稿日時 - 2011-07-22 22:11:46

QNo.6892966

困ってます

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

self を付けるとsetterを通して値が設定されるから。
そして件の obj は retain。 だから2

投稿日時 - 2011-07-22 22:29:59

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

No.2の訂正です。

この「(retain)」を外してみてください。→ この「(retain)」を、「(assign)」に書き換えてみてください。

投稿日時 - 2011-07-22 23:20:08

ANo.2

宣言部

@property(retain)id obj;

この「(retain)」を外してみてください。プロパティの宣言で、retainのオプションを付加することで、Retain Countが増加することがわかります。


> memoryViewController.mm

拡張子.mmは、Objective-C++(Objective-CとC++のブリッジ)に使用する実装ファイルの拡張子ですが、それで合ってます?

投稿日時 - 2011-07-22 22:58:45

補足

.mmは入力ミスです。ありがとうございます。

投稿日時 - 2011-07-22 23:51:31

あなたにオススメの質問