Objective c 发送到实例0x10010c730的选择器无法识别->;目标C

Objective c 发送到实例0x10010c730的选择器无法识别->;目标C,objective-c,Objective C,我是编程新手。我看过这段代码。将派生类对象返回到基类。 这样基类就可以指向派生类方法。 这里,类B中的静态函数将其对象返回到基 班级 基类 #import <Foundation/Foundation.h> #import "B.h" int main (int argc, const char * argv[]) { NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; [B p]; [p

我是编程新手。我看过这段代码。将派生类对象返回到基类。 这样基类就可以指向派生类方法。 这里,类B中的静态函数将其对象返回到基 班级

基类

#import <Foundation/Foundation.h>
#import "B.h"
int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    [B p]; 
    [pool drain];
    return 0;
}
B.h


p
是一种类方法。在Obj-C中,通过在方法声明中使用
+
-
来表示类方法。您可以使用以下方法调用类方法:

// [ClassName methodName];
[B p];
或者您可以通过以下方式将
p
更改为实例方法:

- (A *)p;
// and call
// [instanceName methodName];
[dep p];

您可以检查以开始使用这些

p
是一种类方法。在Obj-C中,通过在方法声明中使用
+
-
来表示类方法。您可以使用以下方法调用类方法:

// [ClassName methodName];
[B p];
或者您可以通过以下方式将
p
更改为实例方法:

- (A *)p;
// and call
// [instanceName methodName];
[dep p];

您可以检查以开始使用这些

内存管理也有一些混乱,如下所示:

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
B* der = [[B alloc]init]; 
[der p];
[pool drain];
您创建并排空自动释放池,以便(在创建之后)将内容放入其中,然后立即(在排空时)处置它们。但是你没有把任何东西放进游泳池。您已经使用“alloc”创建了“der”,这意味着您出于内存管理的目的“拥有”了它,而不是将它放在自动释放池中,在那里它将被自动处理


如果我所做的只是让你更加困惑,你可能应该看看一些关于Objective-C的介绍性书籍。它们在某个时候都涉及到这个话题。或者你可以看看苹果公司关于内存管理的文档,但他们认为你已经知道某些事情。(这很让人困惑,所以请耐心等待…

您的内存管理也有一些困惑,如下所示:

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
B* der = [[B alloc]init]; 
[der p];
[pool drain];
您创建并排空自动释放池,以便(在创建之后)将内容放入其中,然后立即(在排空时)处置它们。但是你没有把任何东西放进游泳池。您已经使用“alloc”创建了“der”,这意味着您出于内存管理的目的“拥有”了它,而不是将它放在自动释放池中,在那里它将被自动处理


如果我所做的只是让你更加困惑,你可能应该看看一些关于Objective-C的介绍性书籍。它们在某个时候都涉及到这个话题。或者你可以看看苹果公司关于内存管理的文档,但他们认为你已经知道某些事情。(这很让人困惑,所以请耐心等待……

谢谢你指出。我会检查内存管理文档。谢谢你指出。我会检查内存管理文档。
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
B* der = [[B alloc]init]; 
[der p];
[pool drain];