Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.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
Ios 属性必须是alloc';ed和init';如果指针指向某个对象,是否会被忽略?_Ios_Objective C - Fatal编程技术网

Ios 属性必须是alloc';ed和init';如果指针指向某个对象,是否会被忽略?

Ios 属性必须是alloc';ed和init';如果指针指向某个对象,是否会被忽略?,ios,objective-c,Ios,Objective C,我回来只是最后一个关于财产的具体问题。我知道在实例化一个类时,属性将被初始化为零或零 这似乎是一个愚蠢的问题,但我想问,因为我不是100%确定。是否需要在类的实现中分配和初始化不是基元类型且是指向对象(如NSArray对象)的指针的属性才能使用 如果不分配和初始化,它将保持为零和未使用 我在这里读了很多问题,在网上进行了研究,等等,但我找不到一个明确的答案,而且我对这个问题感到困惑,如果有人能澄清这一点,我将不胜感激 感谢所有回应的人 当您定义NSArray*或任何其他非基本对象时,它将被nil

我回来只是最后一个关于财产的具体问题。我知道在实例化一个类时,属性将被初始化为零或零

这似乎是一个愚蠢的问题,但我想问,因为我不是100%确定。是否需要在类的实现中分配和初始化不是基元类型且是指向对象(如NSArray对象)的指针的属性才能使用

如果不分配和初始化,它将保持为零和未使用

我在这里读了很多问题,在网上进行了研究,等等,但我找不到一个明确的答案,而且我对这个问题感到困惑,如果有人能澄清这一点,我将不胜感激


感谢所有回应的人

当您定义NSArray*或任何其他非基本对象时,它将被nil占用。例如:

 NSObject *obj; //This object is nil at this stage
如果不初始化它,对象将保持为零。在objective-c中,每次调用nil都将产生nil。 因此,如果在这个阶段调用[obj doSomething],它不会调用,它将返回nil

为了初始化它,您必须分配它。 仅调用alloc是不正确的。alloc将对象的所有实例变量归零,init然后有机会将所有或部分实例变量设置为其默认值。有些类甚至使用它们的init方法创建另一个实例,并返回该实例,而不是您分配的实例


许多类期望调用它们的init方法,如果不调用init,可能会导致崩溃。如果您谈论的是一个直接从NSObject继承的自定义类,并且不需要初始化实例变量,那么您可能不需要[myClass alloc],但它绝对不是一种好的编程风格。

当您定义NSArray*或任何其他非基元对象时,它可能会被一个nil所占用。例如:

 NSObject *obj; //This object is nil at this stage
如果不初始化它,对象将保持为零。在objective-c中,每次调用nil都将产生nil。 因此,如果在这个阶段调用[obj doSomething],它不会调用,它将返回nil

为了初始化它,您必须分配它。 仅调用alloc是不正确的。alloc将对象的所有实例变量归零,init然后有机会将所有或部分实例变量设置为其默认值。有些类甚至使用它们的init方法创建另一个实例,并返回该实例,而不是您分配的实例


许多类期望调用它们的init方法,如果不调用init,可能会导致崩溃。如果您谈论的是直接从NSObject继承的自定义类,并且不需要对实例变量进行初始化,那么您可能不需要[myClass alloc],但它绝对不是一种好的编程风格。

指针只有在指向某个对象时才真正有用。对象属性只是指向对象的指针(也称为对所述对象的引用)。要有一个有用的参考,你只需要把它指向某个地方。在C语言中(扩展为Objective-C),这是通过赋值完成的

myProperty = ...;
创建一个新的类实例只是分配内存并初始化它的过程。Objective-C中的习惯用法是
alloc+init
对,不过应该注意的是
init
只是基本版本。许多/大多数类都有各种实用工具
init
方法,它们采用相关参数。还有一些所谓的工厂方法(例如,
stringWithFormat:
)为您调用
alloc
init
(在本例中为
initWithFormat:
)。例如,
new
方法只调用
alloc
init

尽管如此,所有的
init
方法都返回对刚刚初始化的(新)实例的引用。在分配中使用时,您只是将该引用保存到您的属性中

这是将属性设置为有用值的一种方法。另一种方法是简单地为现有实例分配一个引用,该实例在过去的某个时刻是
alloc
ed和
init
ed

myClass.myProperty = someValue;

指针只有在指向某个对象时才真正有用。对象属性只是指向对象的指针(也称为对所述对象的引用)。要有一个有用的参考,你只需要把它指向某个地方。在C语言中(扩展为Objective-C),这是通过赋值完成的

myProperty = ...;
创建一个新的类实例只是分配内存并初始化它的过程。Objective-C中的习惯用法是
alloc+init
对,不过应该注意的是
init
只是基本版本。许多/大多数类都有各种实用工具
init
方法,它们采用相关参数。还有一些所谓的工厂方法(例如,
stringWithFormat:
)为您调用
alloc
init
(在本例中为
initWithFormat:
)。例如,
new
方法只调用
alloc
init

尽管如此,所有的
init
方法都返回对刚刚初始化的(新)实例的引用。在分配中使用时,您只是将该引用保存到您的属性中

这是将属性设置为有用值的一种方法。另一种方法是简单地为现有实例分配一个引用,该实例在过去的某个时刻是
alloc
ed和
init
ed

myClass.myProperty = someValue;

加上Gal的答案

如果你创建一个像

@property SomeClass *someObject; // this is nil
然后尝试将其添加到数组或字典中

NSDictionary *dictionary = @{"Object" : self.someObject};
这将在运行时崩溃

对象为零并不意味着它永远不会被使用。这意味着它是零。当您使用它时,它将是零,直到它被实例化

但是,您不必在父对象的init处实例化它

我经常使用懒洋娃娃