ios - 为什么我需要在为对象属性赋值之前分配/初始化一个类的实例?

标签 ios objective-c xcode instantiation allocation

与我想知道的有关的简化示例... 所以我有一个自定义类,并声明了该类的一个实例。

MyCustomClass *objectA;

objectA.property = value;

IF I NSLog(@"打印值:%@", objectA.property);

它将返回零。

现在如果我这样声明它...... MyCustomClass *objectA = [MyCustomClass alloc] init];

然后给它赋值...

objectA.property = value;

一切都是顺其自然...

最后,我想知道为什么当 X-Code 看到我在代码中为其分配属性时,它不会自动实例化内存中的对象。从开发人员的角度来看,它不为我做更好。

最佳答案

Tom 的回答涵盖了为什么运行时不能安全地为您创建一个初始化对象。

下一点是:Objective-C 不会为您做任何事情,“因为它知道它应该这样做”。没有自动魔法。如果你想要一个对象,你创建一个初始化对象。如果不这样做,则指针为零。

编译器越来越聪明,这是真的,但是那种“你一定是想创建一个对象,所以我会默默地为你做”的行为意味着你,程序员,无法分辨确定发生了什么。

某些第 4 代(解释型)语言会为您进行这样的设置,但我想不出任何编译/第 3 代语言会这样做。

关于ios - 为什么我需要在为对象属性赋值之前分配/初始化一个类的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26952152/

相关文章:

xcode - 升级到iOS 7 beta/Xcode 5 beta并收到警告 “CODE_SIGN_ENTITLEMENTS specified without a valid Developer Signing Identity for iOS”

ios - 如何在 PageViewController 滑动时更新 ViewController 中的 UIPageControl

iphone - 如何获得一个月中的周数

ios - 从私有(private)有效用户设置中读取。没有有效的答案

ios - 什么时候应该使用 lineHeightMultiple 与 lineSpacing?

将 C 函数转换为 Objective C 或包含 C 库的替代方法?

iphone - 如何让 sizeToFit 忽略宽度?

xcode - 对 Mac 应用安装程序签名的困惑

ios - Apple App Store 提交 - 模拟账户

objective-c - 警告 : declaration does not declare anything