私はこのクラスを持っている:なぜNSStringプロパティにNSMutableStringの変更が割り当てられていないのですか?
@interface XYZPerson : NSObject{
NSString *_myNonPropertyInstanceVariable;
}
@property NSString *firstName;
@property NSString *lastName;
@property NSDate *dateOfBirth;
@property (readonly) NSString* fullName;
@property (nonatomic)NSString* experimental;
-(void)sayHello;
- (void)saySomething:(NSString *)greeting;
+(id)person;
- (id)initWithFirstName:(NSString *)aFirstName lastName:(NSString *)aLastName
dateOfBirth:(NSDate *)aDOB;
@end
実装:私の主な方法で
#import "XYZPerson.h"
@implementation XYZPerson {
NSString *_myNonPropertyInstanceVariable2;
}
@synthesize experimental = _experimental;
-(id)init{
self = [self initWithFirst:@"John" andLastName:@"Doe"];
return self;
}
-(id) initWithFirst:(NSString*)first andLastName:(NSString*)last{
return [self initWithFirstName:first lastName:last dateOfBirth:nil];
}
- (id)initWithFirstName:(NSString *)aFirstName lastName:(NSString *)aLastName
dateOfBirth:(NSDate *)aDOB{
self = [super init];
if(self){
_firstName = aFirstName;
_lastName = aLastName;
_dateOfBirth = aDOB;
}
return self;
}
-(void)sayHello{
NSString* greet = [NSString stringWithFormat:@"Hello, World! %@",self.fullName ];
[self saySomething:greet];
}
-(void)saySomething:(NSString *)greeting {
NSLog(@"%@", greeting);
}
+(id)person{
return [[self alloc]init];
}
-(NSString*)fullName{
return [NSString stringWithFormat:@"%@ %@",_firstName,_lastName];
}
-(void) setExperimental:(NSString *)anExperimental{
_experimental = anExperimental;
}
-(NSString*) experimental{
return @"Balls to you";
}
、私が行います
NSMutableString* firstName = [NSMutableString stringWithString:@"IntheBeggining"];
NSString* secondName = @"MyLastName";
XYZPerson* newP = [[XYZPerson alloc]initWithFirstName:firstName lastName:secondName dateOfBirth:nil];
firstName = [NSMutableString stringWithFormat:@"Awesome"];
[newP sayHello];
は、今、私が期待しているのfirstNameは可変文字列であるため、私はそれを "素晴らしい"に変更すると、sayHelloの呼び出しに反映されるはずですが、出力は次のようになります。
こんにちは、世界! MyByining MyLastName
「Hello、World!Awesome MyLastName」と言っているはずです。なぜNSMutableString *の新しい値が出力に反映されませんでしたか?