Iphone 在objective-c中向函数传递指针

Iphone 在objective-c中向函数传递指针,iphone,objective-c,cocoa,Iphone,Objective C,Cocoa,我有一个关于传球的愚蠢问题 我有这个: @interface MyClass : NSObject myobj* foo; -(void)doSomething:(myobj*)aObj; @end @implementation MyClass -(void)doSomething:(myobj*)aObj { cFuncCall(&aObj); //alloc memory and init the object } -(id)init { //init stuff...

我有一个关于传球的愚蠢问题

我有这个:

@interface MyClass : NSObject
myobj* foo;
-(void)doSomething:(myobj*)aObj;
@end

@implementation MyClass
-(void)doSomething:(myobj*)aObj
{
  cFuncCall(&aObj); //alloc memory and init the object
}

-(id)init
{
  //init stuff...
  [self doSomething:foo]; // foo retun 0x0!!!
}
@end
为什么foo返回零???它应该由cFuncCall初始化! [更新]


是的,问题是,除了某些东西,福并没有改变。我试过用myobj**但是foo还是零。。。 这是真正的代码:

我声明
FMOD::DSP*低通DSP
在类接口中。未设置任何属性

这是初始化lowpassDSP的函数。

-(无效)配置过滤器:(FMOD::DSP**)DSP
{
系统->创建DSPBYTYPE(FMOD\U DSP\U TYPE\U低通,DSP);
基本通道->添加dsp(*dsp,0);
}
这就是电话:
[自配置过滤器:&lowpassDSP]


在configFilter中,dsp变量已正确启动,但lowpassDSP在调用configFilter后为nil。

首先,您的-init方法定义不正确,这可能会导致问题(类的超类未正确初始化)。您的-init方法应在objC中定义如下:

- (id)init {
  if (self = [super init]) {
     // do custom initialization here, perhaps [self doSomething:foo] if required ...
  }

  return self;
}
-编辑:

在objective-C中,我经常看到指针传递给这样的对象(注意指针到指针的表示法),我不确定这在ANSI C中是否也适用于将指针传递给方法,但您可以查看:

- (void)callFunction {
   NSError *error = nil;

   [self doSomethingWithError:&error];

   if (error != nil) {
      NSLog(@"error: %@", error];
   }
}

- (void)doSomethingWithError:(NSError **)error {
    // do something ...
}

首先,您的-init方法没有正确定义,这可能会导致问题(类的超类没有正确初始化)。您的-init方法应在objC中定义如下:

- (id)init {
  if (self = [super init]) {
     // do custom initialization here, perhaps [self doSomething:foo] if required ...
  }

  return self;
}
-编辑:

在objective-C中,我经常看到指针传递给这样的对象(注意指针到指针的表示法),我不确定这在ANSI C中是否也适用于将指针传递给方法,但您可以查看:

- (void)callFunction {
   NSError *error = nil;

   [self doSomethingWithError:&error];

   if (error != nil) {
      NSLog(@"error: %@", error];
   }
}

- (void)doSomethingWithError:(NSError **)error {
    // do something ...
}

问题是对象变量
foo
doSomething:
之外没有更改。 请尝试以下操作:

-(void)doSomething:(myobj**)aObjP
{
    cFuncCall(aObjP);
}

-(id)init
{
    //...
    [self doSomething:&foo];
}

问题是对象变量
foo
doSomething:
之外没有更改。 请尝试以下操作:

-(void)doSomething:(myobj**)aObjP
{
    cFuncCall(aObjP);
}

-(id)init
{
    //...
    [self doSomething:&foo];
}

请显示
cFuncCall
cFuncCall的代码是一个私有API,我没有代码,但是函数分配内存并初始化对象。在doSomthing中,aObj被正确分配并且工作正常。请显示
cFuncCall
cFuncCall的代码是一个私有API,我没有代码,但函数分配内存并初始化对象。在doSomthing中,aObj被正确分配,并且工作正常。我知道,对不起。我写的方法只是举例。我知道,对不起。我写这个方法只是举个例子。另一个问题是,
foo
没有在实例变量块中声明,因此它是一个全局变量,而不是每个MyClass实例的实例变量。如果提问者继续创建多个MyClass实例,这将导致错误的行为,可能会导致内存泄漏。是的,问题是foo没有改变doSomething之外的内容。我试过用myobj**但foo还是零…好吧,这是我的错。在createDSPByType中,函数返回NULL,因为系统未初始化。对不起!:)另一个问题是,
foo
没有在实例变量块中声明,因此它是一个全局变量,而不是每个MyClass实例的实例变量。如果提问者继续创建多个MyClass实例,这将导致错误的行为,可能会导致内存泄漏。是的,问题是foo没有改变doSomething之外的内容。我试过用myobj**但foo还是零…好吧,这是我的错。在createDSPByType中,函数返回NULL,因为系统未初始化。对不起!:)