Objective C实例方法帮助*初学者*

Has*_*ard 0 methods objective-c instance-method

你能帮助我快速理解一个概念,我无法理解从C到Objective-C的转换:

如果我有一个特定的实例方法,如下所示:

-(void)addOwnerNamesObject:(NSString *)n; 
{
    // ownerNames defined as NSMutableSet
    [ownerNames addObject:n];
}
Run Code Online (Sandbox Code Playgroud)

我理解一些事情......

  1. 它是一个可以由程序调用的实例方法.
  2. 在C中,这不会返回任何内容(只需执行curlies中的代码)
  3. 在C语言中,语法略显混乱 - (void)InstanceMethod(Char *nameOfArgument)

这是我需要帮助的地方:

  1. 当你调用这个方法时,你还在发送一个参数吗?
  2. 如果是这样,那个参数NSString是该方法命名的实例n吗?

最后......关闭主题

如果你有方法......

-(id)someMethod:(NSString *)pn
{
}
Run Code Online (Sandbox Code Playgroud)
  1. 什么是(id)?这会告诉编译器它可以返回任何类型的对象吗?

感谢您帮助新手...非常感谢.

Mac*_*ade 5

首先,您应该真正了解一下基本的Objective-C文档.

在Objective-C,一种方法可通过一个前面+-符号.

+用于类方法,-例如方法.

然后你有返回类型,括号内和方法名称.

- ( int )foo;
Run Code Online (Sandbox Code Playgroud)

一个名为的实例方法foo,返回一个int.

类似的C函数是:

int foo( void );
Run Code Online (Sandbox Code Playgroud)

在Objective-C中,当您有参数时,方法名称有点特殊.

例如:

- ( int )foo: ( double )num;
Run Code Online (Sandbox Code Playgroud)

一个名为的成员方法foo:,返回int并接受一个double名为的参数num.

类似C函数:

int foo( double num );
Run Code Online (Sandbox Code Playgroud)

现在有多个参数:

- ( int )foo: ( double )num1 bar: ( float )num2;
Run Code Online (Sandbox Code Playgroud)

一个名为的成员方法foo:bar:,返回int并接受一个double名为num1float参数和一个名为的参数num2.

类似C函数:

int foo( double num1, float num2 );
Run Code Online (Sandbox Code Playgroud)

关于你的问题id,它只是方法返回类型.

id是用于Objective-C实例的typedef.
基本上,它是一个void *.

id 确实表示任何类的Objective-C对象指针.