![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
Objectiv-Cの勉強を始めたばかりの者です。
プロパテイの機能を理解する為に以下のようなプログラムを書きました。
例1)まずは、プロパテイを使わない例です。
ーーーーーーー data.h ーーーーーーー
#import <Foundation/NSObject.h>
#import <Foundation/NSString.h>
@interface Data : NSObject {
NSString* str;
}
- (void)setStr:(NSString* )arg;
- (NSString*)retStr;
@end
ーーーーーーー data.m ーーーーーーー
#import "Data.h"
@implementation Data
- (NSString*) retStr{
return str;
}
- (void)setStr:(NSString*) arg{
[arg retain];
[str release];
str = arg;
}
@end
ーーーーーーー main.m ーーーーーーー
#import <stdio.h>
#import "Data.h"
int main(void) {
Data* data = [[Data alloc] init];
[data setStr:@"aaa"];
NSLog(@"%@",[data retStr]);
return 0;
}
例2)次に、プロパテイを使って例1を書き換えてみました。
ーーーーーーー data.h ーーーーーーー
#import <Foundation/NSObject.h>
#import <Foundation/NSString.h>
@interface Data : NSObject {
NSString* str;
}
@property (retain) NSString* str;
@end
ーーーーーーー data.m ーーーーーーー
#import "Data.h"
@implementation Data
@synthesize str;
@end
ーーーーーーー main.m ーーーーーーー
#import <stdio.h>
#import "Data.h"
int main(void) {
Data* test = [[Data alloc] init];
test.str = @"hoge";
NSLog(@"%@",test.str);
return 0;
}
例2を実行した結果、以下のように出力されました。
2010-02-05 22:17:50.696 data[1583:903] *** __NSAutoreleaseNoPool(): Object 0x100001068 of class NSCFString autoreleased with no pool in place - just leaking
2010-02-05 22:17:50.698 data[1583:903] hoge
@propertyのオプションを(retain) ではなく、(assign)に変更すると、
2010-02-05 22:30:02.271 data[1619:903] hoge
と出力されて、期待した結果が得られるのですが、なぜretainではダメなのでしょう?
また、assignでも例1のようなメモリ管理は自動的に行われているのでしょうか?
以上、ご指導の程、よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
単に、NSAutoreleasePoolを生成してないからでは。
ソースとメッセージを見る限りですが。
osamuyさんご回答ありがとうございました。
以下のように修正したらなおりました。
#import <Foundation/Foundation.h>
#import <stdio.h>
#import "Data.h"
int main(void) {
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
Data* test = [[Data alloc] init];
test.str = @"hoge";
NSLog(@"%@",test.str);
[pool release];
return 0;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) Python - Excel で Webからデータを連続取得したいのですが エラーが出ます 1 2023/07/06 20:08
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- その他(プログラミング・Web制作) ColabでのPytorchのエラー 1 2022/11/19 20:51
- その他(プログラミング・Web制作) pythonでDBのカラム名で取得したオブジェクトの値を表示したい 1 2022/05/13 03:41
- その他(プログラミング・Web制作) pandasでまとめてインデックスを削除するにはどうすればいいですか? たとえば、以下のプログラムで 1 2022/07/31 23:09
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
eclipseに記述したjavaファイル...
-
【JAVAエラー】互換性のない型...
-
【Objective-C】プロパテイにつ...
-
javaで画像を回転縮小
-
import文はルートクラス指定と...
-
アプレットのコード変更後の反...
-
javaプログラムの問題です
-
干支の計算で。。。
-
C# 半角カナの文字化けについて
-
Javaで文字と数字が混ざったも...
-
ハートマークを表示するには?
-
0~9まで入力させ、前に入力さ...
-
System.out.printlnの出力先
-
配列への文字列の格納について
-
C言語のポインターに関する警告
-
JSPでDBからデータ読み込みブラ...
-
パソコンキーボードで時分秒を...
-
nullcline
-
エクセルの配列定数について教...
-
JAVAで素数判定
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
eclipseに記述したjavaファイル...
-
<forEach> 内で供給された "ite...
-
「例外 *** は対応する try 文...
-
importするには java.io.*; imp...
-
Javaを使ってデジタル時計を作...
-
setAttribute(String, int)は適...
-
シャットダウンフックが呼ばれない
-
干支の計算で。。。
-
Selenium IDEでexportしたコー...
-
ColabでのPytorchのエラー
-
【JAVAエラー】互換性のない型...
-
文字列を数式に
-
importとextendsの用い方の違い...
-
ActionForm form にnullが入っ...
-
Java3Dで横置き円筒体の円筒中...
-
HttpClientについて
-
画面遷移時のデータ遷移について
-
java初心者です。座標取得と図...
-
生年月日と今日の日付から年齢...
-
javaで画像を回転縮小
おすすめ情報