Objective c 自指针,与C+一起使用+;来自目标C
我对self指针有点困惑。我知道如果我想在目标C中使用self,我需要将其作为参数传递,例如Objective c 自指针,与C+一起使用+;来自目标C,objective-c,syntax,properties,objective-c++,self,Objective C,Syntax,Properties,Objective C++,Self,我对self指针有点困惑。我知道如果我想在目标C中使用self,我需要将其作为参数传递,例如 someFunction(id self) { } 然而,我有点困惑的是,如果我想使用self的成员变量,我会得到以下错误 在类型为“\u strong id”的对象上找不到属性“browser” 我在头文件中将浏览器定义为: @property webBrowser* browser; 我试图在我的C++函数中调用我的WebBubor类函数: [self.browser StartSearch:
someFunction(id self)
{
}
然而,我有点困惑的是,如果我想使用self的成员变量,我会得到以下错误
在类型为“\u strong id”的对象上找不到属性“browser”
我在头文件中将浏览器定义为:
@property webBrowser* browser;
<>我试图在我的C++函数中调用我的WebBubor类函数:
[self.browser StartSearch:self];
错误发生在上面的行中。如果改为将self的成员变量作为参数传递,则该函数的调用肯定是正确的。不过这感觉有点不舒服
任何关于它为什么不起作用以及替代方案是什么的解释都很好。您可以简单地指定参数类型,而不是使用通用的
id
:
void someFunction(MONObject * self) {
[self.browser StartSearch:self];
}
或者如果你觉得你真的真的需要这种类型的删除(例如编译防火墙),你可以考虑改写:
// Some.mm
void someFunction(id self) {
MONObject * object(self);
[object.browser StartSearch:self];
}
为了在dot中使用属性语法,您需要向编译器提供确切的类型,例如通过将
id
指针强制转换为类的类型。如果不希望使用确切的类型或强制转换,请使用方法调用语法:
[[self browser] StartSearch:self];
按照惯例,Objective-C方法以小写字母开始,类以大写字母开始。遵循这些约定,代码变得更可读。我来自C++背景,所以我道歉。没有必要道歉,只是想帮助你。我也来自C++。这一个非常适合我的需要,但我确信另一个答案也是有效的。一般来说,使用正确的类型代替