Почему «копия» не вызывается? - PullRequest
1 голос
/ 10 апреля 2009

У меня есть следующий объект:

@interface SomeObject : NSObject
{
    NSString *title;
}

@property (copy) NSString *title;

@end

А у меня есть еще один объект:

    @interface AnotherObject : NSObject{
        NSString *title;
    }

    @property (copy) NSString *title;

    - (AnotherObject*)init;
    - (void)dealloc;
    - (void) initWithSomeObject: (SomeObject*) pSomeObject;
    + (AnotherObject*) AnotherObjectWithSomeObject (SomeObject*) pSomeObject;

    @end

@implementation AnotherObject
@synthesize title


    - (AnotherObject*)init {
        if (self = [super init]) {
            title = nil;
        }
        return self;
    }

    - (void)dealloc {
        if (title) [title release];
        [super dealloc];
    }

    -(void) initWithSomeObject: (SomeObject*) pSomeObject
    {
        title = [pSomeObject title]; //Here copy is not being invoked, have to use [ [pSomeObject title] copy]
    }


    + (AnotherObject*) AnotherObjectWithSomeObject (SomeObject*) pSomeObject;
    {
        [pSomeObject retain];
        AnotherObject *tempAnotherObject = [ [AnotherObject alloc] init];
        [tempAnotherObject initWithSomeObject: pSomeObject];
        [pSomeObject release];
        return tempAnotherObject;
    }

@end

Я не понимаю, почему копия не вызывается, когда я назначаю "title = [pSomeObject title]". Я всегда думал, что если я установлю «copy» в свойстве, это всегда будет вызываться. В моем коде ошибка или я чего-то не понимаю?

Заранее спасибо.

1 Ответ

3 голосов
/ 11 апреля 2009

Для вызова вызывающего устройства вам необходимо использовать обозначение точка .

self.title = [pSomeObject title];

или ... чтобы использовать нотацию точка для pSomeObject *

self.title = pSomeObject.title;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...