Objective-C类中的指针,基元和属性

qst*_*tar 3 pointers properties objective-c primitive-types

我真的需要一些澄清 - 我有几个问题,我现在都搞砸了.

这是一个简单的类接口:

#import <UIKit/UIKit.h>

@interface Car : NSObject{
    NSInteger carID;
    NSString *carName;
}

@property (nonatomic, assign) NSInteger carID;
@property (nonatomic, copy) NSString * carName;
@end
Run Code Online (Sandbox Code Playgroud)
  1. 为什么carID不被声明为指针?
  2. 为什么使用"assign" carID而不是"copy"?
  3. 为什么甚至首先将类成员声明为指针?(在我的主程序中,我的Car对象将用作指针.)

Wil*_*and 5

NSInteger它只是一个原始类型的typedef(int在32位,long在64位上) - 它不是一个对象,因此不能保留或复制.

班级成员总是指针; 你永远不会传递"真实"的物体; 因为那将至多是无法控制的.

编辑:扩展最后一段:Objective-C类实例总是存在于堆上,永远不会存在于堆栈中; 这是为了方便引用计数和自我管理对象生命周期等事情.

这也意味着很难意外复制一个物体; 但另一方面,意外处理您仍然需要的物体可能会更容易一些.尽管如此,后者更容易调试(因为它导致一个不错的,大的崩溃(最好,无论如何)),而不是最后一次(最糟糕的是导致缓慢的泄漏).

  • 其他类似于类的普通旧数据类型:`NSUInteger`(unsigned long),`CGPoint`,`CGRect`,`NSRange`(structs),`CGFloat`(double) (3认同)