我刚开始使用Objective-C,我想了解以下代码行的含义,因为我在objective-c中到处都看到了它,但我并不是100%得到它:
- (id)initWithName:(NSString *)name;
据我所知,上面这行是一个传递一个参数的实例方法,我不明白的是(NSString *)名称。
另一个例子是:
-(NSString *)name;
或
person.height = (NSObject *)something;
感谢您的帮助
答案 0 :(得分:4)
- (id)initWithName:(NSString*)name;
是一个方法的签名,它带有一个名为name
的参数,它是指向NSString
的指针。
-(NSString *)name;
是一个名为name
的访问器方法,它返回指向NSString
的指针。
person.height = (NSObject *)something;
将something
类型转换为NSObject
指针,然后将其分配给person.height
属性。
答案 1 :(得分:2)
在这一行:
- (id)initWithName:(NSString *)name;
(NSString *)
只是参数的类型 - 一个字符串对象,它是Cocoa中的NSString类。在Objective-C中,您总是处理对象引用(指针),因此“*”表示该参数是对NSString
对象的引用。
在这个例子中:
person.height = (NSObject *)something;
发生了一些不同的事情:(NSObject *)
再次指定一个类型,但这次它是一个“类型转换”操作 - 这意味着采取“某事”对象引用(可能是一个NSString
,NSNumber
或...)并将其视为对NSObject
的引用。
更新 -
在谈论Objective-C对象(而不是像int或float这样的原始类型)时,所有内容最终都是指针,因此强制转换操作意味着“将此指针指向X
并将其视为指向{{{ 1}}”。例如,如果您有一个包含泛型Y
的容器类(如NSArray
),但您知道这些对象实际上是字符串,您可能会说:
NSObject
表示“从数组中检索第一个对象,将其视为字符串”。
演员实际上并没有转换价值,这只是对编译器的一种说法“嘿,我知道我在这里给Y分配一个X,所以不要给我一个关于它的警告”。
答案 2 :(得分:0)
- (id)initWithName:(NSString *)name;
-----------------------------------------
'-' means its an instance method (+ is used for static methods)
'(id)' is the return type
'initWithName' is the function name, the name implies its a constructor
':' start of parameter
'(NSString*)' parameter type
'name' parameter name
相当于
(id)initWithName( NSString* name )
答案 3 :(得分:0)
(NSString *)name
表示变量name
是NSString对象的指针*
。它是一个指针,因为name
变量不是字符串,而是它只是内存中该字符串的地址。