Будучи noob в объективе-c, я просто столкнулся с проблемой в собственности объекта в классе, который не может объяснить причину.Объект собственности объекта объекта c
Предположим, что у меня есть класс под названием Point
, который описывает точку с x, y. Класс, называемый прямоугольником, имеет объект типа Point
, который представляет его левый нижний край. С после внедрения
@implementation Rectangle {
Point *origin;
}
-(Point *) origin {
return origin;
}
-(void) setOrigin: (Point *) pt {
origin = pt;
}
@end
Теперь я просто экземпляр Rectangle, присвоить его происхождение указатель на объект точки
Rectangle *rectangle2 = [[Rectangle alloc] init];
Point *pt = [[Point alloc] init];
[pt setX:1 andY:2];
rectangle2.origin = pt;
NSLog(@"Point's x= %i, y=%i",pt.x,pt.y); // result: Point's x=1,y=2
NSLog(@"Rectangle's origin x= %i, y=%i",rectangle2.origin.x,rectangle2.origin.y); //Rectangle's origin x=1,y=2
Теперь, если я изменю х, у объекта пт (следующую строку кода), происхождение объекта rectangle2 будет меняться, как хорошо, потому что он не является владельцем его объекта, а не только указывает, где пт, указывающей на
[pt setX:10 andY:12];
NSLog(@"Point's x= %i, y=%i",pt.x,pt.y); // result: Point's x=10,y=12
NSLog(@"Rectangle's origin x= %i, y=%i",rectangle2.origin.x,rectangle2.origin.y); //Rectangle's origin x=10,y=12
Это вполне логично, без вопроса.
Проблема, похоже, происходит в аналогичном сценарии. AddressCard класс имеет объект типа NSString,
@implementation AddressCard{
NSString *phone;
}
-(void) setPhone:(NSString *) p {
phone = p;
}
-(NSString *) name {
return name;
}
@end
Я инстанцирование AddressCard, присвоить указатель NSString на его телефонный объект.
AddressCard *addressCard1 = [[AddressCard alloc] init];
NSString *phoneObject = @"(111) 111 - 1111";
addressCard1.phone = phoneObject;
NSLog(@"addressCard1 phone: %@",addressCard1.phone); // result: (111) 111 - 1111
NSLog(@"phone object: %@",phoneObject); // result: (111) 111 - 1111
Но теперь, если я изменю phoneObject, addressCard1.phone не изменится, несмотря на это, как я устанавливаю объект телефона в классе AddressCard (метод setPhone в реализации класса)
phoneObject = [NSString stringWithString:@"PHONE IS CHANGED"];
NSLog(@"%@",phoneObject); //result : PHONE IS CHANGED
NSLog(@"Phone after change in the AddressCard is: %@",addressCard1.phone); // result: (111) 111 - 1111
Могли бы некоторые object-c ninja рассказывает мне, в чем разница между двумя фрагментами и причиной этого?