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ファイル...
-
ActionForm form にnullが入っ...
-
Javaを使ってデジタル時計を作...
-
jFrameを使って複数の画面を生...
-
repaint()が実行されません。
-
java通信について
-
JButtonの改行したラベルがリロ...
-
setAttribute(String, int)は適...
-
importするには java.io.*; imp...
-
ダブルクォーテーションのrepla...
-
javaで質問です。 文字列2023/2...
-
JSPやサーブレットでSystem.out...
-
変数を動的に利用するには?
-
C言語のポインターに関する警告
-
パソコンキーボードで時分秒を...
-
ORA-01858: 数値を指定する箇所...
-
System.err. printlnとSystem.o...
-
大量のデータを読み込んで表示...
-
カタカナの小文字を大文字に変...
-
System.out.printlnの出力先
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
eclipseに記述したjavaファイル...
-
<forEach> 内で供給された "ite...
-
「例外 *** は対応する try 文...
-
importするには java.io.*; imp...
-
Javaを使ってデジタル時計を作...
-
setAttribute(String, int)は適...
-
シャットダウンフックが呼ばれない
-
干支の計算で。。。
-
Selenium IDEでexportしたコー...
-
ColabでのPytorchのエラー
-
【JAVAエラー】互換性のない型...
-
文字列を数式に
-
importとextendsの用い方の違い...
-
Java3Dで横置き円筒体の円筒中...
-
HttpClientについて
-
ActionForm form にnullが入っ...
-
java初心者です。座標取得と図...
-
javaで画像を回転縮小
-
(急募)Javaじゃんけんゲームで
-
画面遷移時のデータ遷移について
おすすめ情報