2

私は Objective-C の初心者ですが、C と C++ の経験は豊富です。私が最初に気付いたのは、iPhone または Mac 向けに開発し、Cocoa を使用していると想定しているため、そこにある基本的なチュートリアルには実際の空白があるということです。Cocoa や Gnustep は使用していません。ポイントへ:

始めるための簡単な例として、C のファイル I/O 機能をラップしようとしています。私のコードは File.h として始まります

#include <objc/Object.h>
#include <stdio.h>
@interface File:Object
{
    FILE *pFile;
    char *path;
}

@property FILE *pFile;
@property char *path;

- (void)new;
- (void)OpenReadText:(const char*)var1;
- (void)release;

@end

そしてFile.m

#include "File.h"

@implementation File

@synthesize pFile, path;

- (void)new
{
    self = [super init];
}
- (void)release
{
    fclose(pFile);
    [super release];
}

- (void)OpenReadText:(char*)var1
{
    path = var1;
    pFile = fopen(path,"r");
}

@end

次に、main.m

#include <stdio.h>
#import <objc/Object.h>
#include "File.h"

int main(void) {

File *Fileobj = [File new];

[Fileobj OpenReadText:"File.h"];

[Fileobj release];


}

コンパイラから、オブジェクトが「'-release' に応答しない可能性がある」という警告が表示されます。その後、プログラムを実行するとランタイム エラーが発生します。「リリースを認識しません。このアプリケーションは、ランタイムの終了を要求しています」..

私は単純な初心者の間違いを犯していると思いますが、どこで?それとも何かが足りないのでしょうか?ここで誰かが私を正しい方向に向けてくれることを願っています。ありがとう。

このqstがすでに尋ねられている場合は、参照も必要です。私は参照を見つけようとしましたが、運がありませんでした。

ファローアップ:

リリース方法をに変更

- (void)release
{
    fclose(pFile);
    [super free];
}

そしてそれはうまくいくように見えました。で認識freeされているようobject.hです。

4

3 に答える 3

2

releaseクラスで定義されていObjectますか?そうでない場合は、

[super release];

動作しないでしょう。(ココアでは、リリースはのメンバーですNSObjectObjectクラスにはそれがある場合とない場合があります。実際、保持/リリース参照カウントはまったくない場合があります。)

基本クラスに、を介して呼び出されるすべてのメソッドが含まれていることを確認する必要がありますsuper

于 2013-02-24T02:12:31.343 に答える