You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Objective-C中如何不新增属性或初始化方法访问对象的实例化变量名?

能否在不新增属性/初始化方法的前提下,让description获取对象的变量名?

我在BNREmployee.m实现文件中重写默认的description方法,希望能访问main.m里实例化对象时用的变量名john。请问能不能在不给BNREmployee创建单独的name属性或实例变量,也不新增传入该名称的独立初始化方法的前提下实现这个需求?

main.m文件:

#import <Foundation/Foundation.h>
#import "BNRPerson.h"
#import "BNREmployee.h"
#import "BNREmployer.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        BNREmployee *john = [BNREmployee new];
        BNREmployer *costco = [BNREmployer new];
        [john setEmployer:costco];
        [costco setEmployeesList:[NSMutableSet setWithObject:john]];
        
        NSLog(@"employee: \n%@", john);
    }
    return 0;
}

BNREmployee.m文件:

#import "BNREmployee.h"

@implementation BNREmployee

-(NSString*) description
{
    return [NSString stringWithFormat:@"<Employee %@ with id: %d and employer: %@", [self ???***???], self.employeeId, self.employer];
}
@end

回答

做不到。

原因很直接:变量名john是main函数里的局部符号,编译后这个名称会被替换成对象所在的内存地址,运行时对象本身完全不知道自己被哪个变量引用——一个对象可以同时被多个变量指向,甚至没有任何变量引用它(比如临时创建后直接传入方法的对象)。

对象的description方法属于对象自身的逻辑,它只能访问对象内部的属性、实例变量,或者通过外部传入的信息,没办法直接获取外部引用它的变量名。如果要在description里输出类似john这样的名称,必须通过新增name属性、初始化时传入名称这类方式,把名称和对象绑定起来。

内容的提问来源于stack exchange,提问作者brunshte

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 01:11:05