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,因为系统未初始化。对不起!:)