我开始使用Objective C,但我无法理解基本的配置本身。 以下是我的代码
@interface
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
NSString *_str;
}
-(void) print;
-(id) init;
@end
@implementation
#import "Person.h"
@implementation Person
-(id) init{
self=[super init];
char c[50];
scanf("%s",c);
NSString *xyz=[NSString stringWithUTF8String:c];
NSLog(@"%p",xyz);
_str=xyz;
xyz=@"omg";
NSLog(@"%p",_str);
return self;
}
-(void) print{
NSLog(@"%p",_str);
NSLog(@"%@",_str);
}
@end
的main.m
#import <Foundation/Foundation.h>
#import "Person.h"
#import <stdio.h>
int main(int argc, const char * argv[]) {
Person *ob=[[Person alloc] init];
[ob print];
return 0;
}
代码非常简单:
xyz
xyz
分配给实例可变_str
xyz
由于xyz
和_str
基本上都是指针,我认为更改xyz
的值也会改变_str
的值。但我没有看到,即使两个变量都指向同一个位置!。有人请说明作业的实际工作方式以及为什么更新xyz
不会影响_str
。
输出:
My_console_input
2018-05-06 22:28:54.714327+0530 learn_objc1[8109:135801] 0x10051ceb0
2018-05-06 22:28:54.714833+0530 learn_objc1[8109:135801] 0x10051ceb0
2018-05-06 22:28:54.714878+0530 learn_objc1[8109:135801] 0x10051ceb0
2018-05-06 22:28:54.715014+0530 learn_objc1[8109:135801] My_console_input
Program ended with exit code: 0
答案 0 :(得分:1)
让我们用一个类比。把你的变量想象成站在停车场的人。现在想想你的字符串对象就像停车场里的汽车一样。
由于这些变量是指针,想象一下人们伸出手臂指向一辆特定的汽车。你有两个人戴着名牌。一个名称标签说&#34; _str&#34;另一个说&#34; xyz&#34;。
以下步骤与您的代码类似:
此时,&#34; _str&#34;家伙仍然指着&#34; C&#34;汽车。仅仅因为&#34; xyz&#34;家伙现在指的是一辆不同的汽车,并不代表&#34; _str&#34;那家伙改变了他指向的东西。
您对代码的困惑似乎与类比的第2步有关。行_str = xyz;
只是意味着两个变量(人)现在指向同一个对象(汽车)。它并不意味着它们现在是同一个变量。