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
相关产品推荐
相关产品推荐

