这是一个让我很困惑的基本问题:当*在()中而条件*在没有()的情况下使用时,条件之间的区别是什么?换句话说,int *myPointer
和(NSString *)description
之间有什么区别?
答案 0 :(得分:2)
首先,没有括号的表格:
NSString *name;
是如何将变量声明为指向某种类型对象的指针。在目标C中,您处理并传递指向Objective C对象的指针,而不是实际对象。 (如果您尝试声明NSString name
,即不是指针,编译器将抛出错误。)
格式(NSString *)description
的某些内容可能出现在两个不同的上下文中。
第一种形式:
- (int)doSomethingToString:(NSString *)str {
描述了方法的参数类型。换句话说,str
是指向NSString
的指针。
第二种形式:
// suppose myArray be an array of NSString objects...
int firstStringLength = [(NSString *)[myArray objectAtIndex:0] length];
用于告诉编译器对象具有某种类型。在上面的例子中,我们给编译器一个提示,即从NSArray
中抽出的东西是指向NSString
的指针。这会阻止编译器抱怨我们调用length
,这是一种方法(AKA'选择器'),它存在于NSString
(但不适用于类型id
)。
N.B。访问集合中的对象(例如NSArray)会返回类型id
的内容,它与struct objc_object *
同义,即指向某个对象的指针。因此,您经常会在已从数组中删除的对象上看到类型转换。
答案 1 :(得分:0)
如果你选择NSString *myPointer
,这意味着你将mypointer声明为一种NSString。如果您正在执行(NSString *)myPointer
,这意味着您将myPointer类型转换为NSString类型
答案 2 :(得分:0)
因此,有关数据类型的一些内容:
原始类型,例如unsigned
,int
,BOOL
,double
,float
,char
等。不需要与指针一起使用来表示它们的数字类型,因为它们代表你期望的内容,即内存中的数字。
当您进入更复杂的结构(例如类)时,作为一般经验法则,对于静态方法调用,NSObject
引用对象的Class
({{1 }},+new
,+alloc
,+initialize
等)此类数据结构可能无法通过格式为+class
的方法返回,因为返回类对象必须通过类数据类型完成,如下所示:-(NSObject) myMethodName
。要获取数据类型的类,必须调用类-(Class) myMethodName
方法,如下所示:+class
一旦有了对象的类,就可以对它做一些有趣的事情,比如直接发送方法来分配一个物体,例如Class myClass = [NSObject class]
现在,当您返回指向某个类的指针时,例如NSObject *myObject = [[[NSObject class] alloc] new];
,您返回该类的实例。这样,您可以访问该类的变量(如果它们是公共的),例如-(NSObject *) myMethodName
。您还可以访问实例方法,例如Class myClass = [[NSObject alloc] init]->isa
,-init
,-description
等。使用类的实例,您必须记住履行职责并-class
完成后的对象,如果您拥有所有权。
希望这有帮助。我没有,但可以详细介绍release
和numerical pointers
。
答案 3 :(得分:-1)
在C / C ++中, 一个是(无论你使用什么)指针(指向数组的指针) 第二个是(无论你用什么)指针(数组到指针)。
int * a [10];
声明并分配一个指向int.Each元素的指针数组 被单独解除引用。
int(* a)[10];
声明(不分配)指向int数组的指针 必须取消引用指向数组的指针才能访问每个数组的值 元件。