Объявление свойства - значения ivar и getter не совпадают

У меня есть сомнения относительно повторного объявления свойства

Обзор:

  • класс «A» является родительским классом со свойством только для чтения int n1;
  • класс «B» является подклассом, который повторно объявляет свойство как чтение запись
  • с использованием установщика класса «B» значение свойства устанавливается как 20
  • , когда я печатаю значение с помощью получателя и переменной экземпляра, я, кажется, получаю разные значения

На заметку : - Управление памятью = ARC (автоматический подсчет ссылок)

Вопрос:

  • Когда я печатаю значения self.n1 и _n1, почему я получаю разные значения?
  • Мое ожидаемое и фактическое поведение не Почему не совпадает (прокрутите вниз, чтобы увидеть фактическое и ожидаемое)?

Код: (в отдельных файлах)

Ah

#import<Foundation/Foundation.h>

@interface A : NSObject

@property (readonly) int n1;

- (void) display;

@end

Am

#import "A.h"

@implementation A

@synthesize n1 = _n1;

- (void) display
{
    printf("_n1     = %i\n", _n1);                  //I expected _n1 and self.n1 to display the same value
    printf("self.n1 = %i\n\n", self.n1);            //but they seem to display different values
}

@end

Bh

#import"A.h"

@interface B : A

@property (readwrite) int n1;

@end

Bm

#import"B.h"

@implementation B

@synthesize n1 = _n1;

@end

test.m

#import"B.h"

int main()
{
    system("clear");

    B* b1 = [[B alloc] init];

    b1.n1 = 20;

    [b1 display];   //Doubt - my expected behavior is different from actual behavior


    return(0);
}

Ожидаемое поведение:

_n1     = 20
self.n1 = 20

Фактическое поведение:

_n1     = 0
self.n1 = 20
10
задан user1046037 7 December 2011 в 03:38
поделиться