Objective-C中具有相同名称的多个对象

 雅皮享客被 发布于 2022-12-08 19:03

我一直在学习Big Nerd Ranch Book的Objective-C.我被困在第21章示例代码中.

这是BNREmployee类头和主文件代码.

@interface BNREmployee : BNRPerson
{
    NSMutableArray *_assets;
}

@property (nonatomic) unsigned int employeeID;
@property (nonatomic) unsigned int officeAlarmCode;
@property (nonatomic) NSDate *hireDate;
@property (nonatomic, copy) NSArray *assets;
- (double)yearsOfEmployment;
- (void)addAsset:(BNRAsset *)a;
- (unsigned int)valueOfAssets;

@end

的main.m

for (int i = 0; i < 10; i++) {
            // Create an instance of BNREmployee
            BNREmployee *mikey = [[BNREmployee alloc] init];

            // Give the instance variables interesting values
            mikey.weightInKilos = 90 + i;
            mikey.heightInMeters = 1.8 - i/10.0;
            mikey.employeeID = i;

            // Put the employee in the employees array
            [employees addObject:mikey];
        }

所以,我的问题是我们如何为具有相同名称的BNREmployee类创建多个对象,即'mikey'.它在循环内部完成.但是,它是如何工作的,为什么编译器允许这样做呢?谢谢

1 个回答
  • 这是关于objective-C的一个非常基本的语法问题. mikey是一个指向a实例的变量BNREmployee.每次循环迭代,您创建一个新BNREmployee实例,并覆盖mikey以指向新实例.

    这一行:

    BNREmployee *mikey = [[BNREmployee alloc] init];
    

    创建一个实例BNREmployee,并将其分配给mikey.您可以创建另一个实例BNREmployee并再次执行相同操作:

    mikey = [[BNREmployee alloc] init];// same thing again.
    

    在循环中执行此操作与执行此操作基本相同.一个更简单的例子是:

    int mikey = 1;
    mikey = 2;
    mikey = 3;
    

    这是相同的概念; 你正在创建整数并将它们分配给mikey.

    在您的代码中,实例employees通过该行存储[employees addObject:mikey];.现在,BNREmployee您创建的实例存储在多个位置:一次进入mikey,一次进入employees.循环继续时,mikey将重新分配给另一个新实例. employees继续累积您创建的实例.

    为什么你认为编译器不应该允许这个?

    2022-12-11 02:11 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有