Objective-C/iPhone SDK指针帮助
我对iPhone的开发还不熟悉,我在Objective-C中使用了一些指针。有人能简单地向我解释一下指针吗?我知道有些原生C类型不需要指针(即弱类型),比如int 还有,这两者之间的区别是什么:Objective-C/iPhone SDK指针帮助,iphone,objective-c,pointers,Iphone,Objective C,Pointers,我对iPhone的开发还不熟悉,我在Objective-C中使用了一些指针。有人能简单地向我解释一下指针吗?我知道有些原生C类型不需要指针(即弱类型),比如int 还有,这两者之间的区别是什么: NSDate* theDate = [NSDate date]; 以及: ? 再次感谢你 无,但您可能更喜欢第二个,因为日期是指针更为明确 NSDate * theDate = [NSDate date]; 也可以执行相同的操作无,但您可能更喜欢第二个,因为日期是指针更为明确 NSDate * th
NSDate* theDate = [NSDate date];
以及:
?
再次感谢你 无,但您可能更喜欢第二个,因为日期是指针更为明确
NSDate * theDate = [NSDate date];
也可以执行相同的操作无,但您可能更喜欢第二个,因为日期是指针更为明确
NSDate * theDate = [NSDate date];
也一样这两件事没有区别。星号表示一个指针,但它的两边可能有你喜欢的空白。例如,以下内容同样有效:
NSDate * theDate = [NSDate date];
Objective-C的创建者选择将对象添加到C中,方法是将它们全部保留在堆上(即,它们是您显式创建和销毁的对象—Objective-C中没有本地对象),并通过指针引用它们。指针只是内存地址。所以“NSDate*”不是NSDate,它只是记录NSDate对象在内存中的位置。就像街道地址和房子的区别一样
原语操作(如加法、乘法等)仅对C原语类型有效,如int、short、float等。从技术上讲,您保留到Objective-C对象的指针是原语类型,因为您实际拥有的是地址而不是对象。但它们通常不是很有用
只能通过向对象发送消息来操作对象。方括号语法表示“将此消息发送到此对象”。当你刚开始的时候,它就足够像一个函数调用,可以这样想。有一个区别,C在编译时做的一些事情,Objective-C在运行时做的。但是你可以相信他们现在已经完成了
Objective-C相对来说是无类型的——您声明指针为特定类型,但是您对它们执行的操作(即发送消息)的行为方式完全相同,与类型无关。这就是“id”类型(表示任何对象)可以存在的原因。Objective-C是弱类型的,因为id类型的变量可以有一个指向指定给它的任何对象的指针
实际上,所有对象都是从NSObject派生的,因此在类型跳转时使用NSObject*和显式强制转换通常更有用。这意味着您可以在没有编译器警告的情况下使用NSObject添加的内容,包括Objective-C的引用计数内存内容、查找对象是否可以执行特定消息的内容等等。这两种内容之间没有区别。星号表示一个指针,但它的两边可能有你喜欢的空白。例如,以下内容同样有效:
NSDate * theDate = [NSDate date];
Objective-C的创建者选择将对象添加到C中,方法是将它们全部保留在堆上(即,它们是您显式创建和销毁的对象—Objective-C中没有本地对象),并通过指针引用它们。指针只是内存地址。所以“NSDate*”不是NSDate,它只是记录NSDate对象在内存中的位置。就像街道地址和房子的区别一样
原语操作(如加法、乘法等)仅对C原语类型有效,如int、short、float等。从技术上讲,您保留到Objective-C对象的指针是原语类型,因为您实际拥有的是地址而不是对象。但它们通常不是很有用
只能通过向对象发送消息来操作对象。方括号语法表示“将此消息发送到此对象”。当你刚开始的时候,它就足够像一个函数调用,可以这样想。有一个区别,C在编译时做的一些事情,Objective-C在运行时做的。但是你可以相信他们现在已经完成了
Objective-C相对来说是无类型的——您声明指针为特定类型,但是您对它们执行的操作(即发送消息)的行为方式完全相同,与类型无关。这就是“id”类型(表示任何对象)可以存在的原因。Objective-C是弱类型的,因为id类型的变量可以有一个指向指定给它的任何对象的指针
实际上,所有对象都是从NSObject派生的,因此在类型跳转时使用NSObject*和显式强制转换通常更有用。这意味着您可以在没有编译器警告的情况下使用NSObject添加的内容,包括Objective-C的引用计数内存内容、查找对象是否可以执行特定消息的内容等等。NSDate*日期之间没有区别代码>和
NSDate*日期
,但对于首选的样式,已经有过争论,就像对于{应该在同一行还是在下一行发生过争论一样。您可以键入NSDate*thedate;
以取悦双方:)
指针是一个值,其中包含有关在何处查找另一个值的信息
是一个实际的8位整数值char
是一个32位或64位的值,其中包含8位整数char*
的位置信息char
*
,就可以生成一个指向任何类型值的“指针”。如果愿意,甚至可以是递归的;char**
是指向8位整数值指针的指针
C有一个结构的概念,即对可能属于不同类型的值进行分组,这些值应作为复合值处理。例如:
typedef struct {
float CGFloat;
float CGFloat;
} CGPoint;
结构被视为原子值,这有一些含义,如本例所示:
CGPoint p1 = CGPointMake(1, 42);
CGPoint p2 = p1; // a COPY of p1 is made.
STAssert(p1.x == p1.x, @""); // Is true
p2.x = 10; // p1.x is NOT affected.
STAssert(p1.x == p2.x, @""); // Is no longer true
事实证明,Objective-C中的底层对象实际上是结构。这些结构的实际成员被抽象出来,但它们仍然是
哟