Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective-C/iPhone SDK指针帮助_Iphone_Objective C_Pointers - Fatal编程技术网

Objective-C/iPhone SDK指针帮助

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

我对iPhone的开发还不熟悉,我在Objective-C中使用了一些指针。有人能简单地向我解释一下指针吗?我知道有些原生C类型不需要指针(即弱类型),比如int

还有,这两者之间的区别是什么:

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;
以取悦双方:)

指针是一个值,其中包含有关在何处查找另一个值的信息

  • char
    是一个实际的8位整数值
  • char*
    是一个32位或64位的值,其中包含8位整数
    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中的底层对象实际上是结构。这些结构的实际成员被抽象出来,但它们仍然是