У меня есть сомнения относительно переоценки свойств
Обзор:
- класс "A" - это родительский класс с свойством readonly int n1;
- класс "B" - это подкласс, который переопределяет свойство как прочитанное write
- с помощью установщика класса "B" значение свойства устанавливается как 20
- когда я печатаю значение с помощью getter и переменной экземпляра, я, кажется, получаю разные значения
Замечания: - Управление памятью = ARC (автоматический подсчет ссылок)
Вопрос:
- Когда я печатаю значения self.n1 и _n1, почему я получаю разные значения?
- Мое ожидаемое поведение и фактическое поведение не совпадают с тем, почему (Pls прокручивается вниз, чтобы увидеть фактический vs ожидаемый)?
Код: (в отдельных файлах)
хиджры
#import<Foundation/Foundation.h>
@interface A : NSObject
@property (readonly) int n1;
- (void) display;
@end
a.m
#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
B.h
#import"A.h"
@interface B : A
@property (readwrite) int n1;
@end
B.m
#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