Gdybym zawierać kilka automatycznych właściwości tak:Jak automatyczne @syntezowane ivars wpływają na * prawdziwy * sizeof (MyClass)?
@property (nonatomic, readonly) NSInteger test1;
@property (nonatomic, readonly) NSInteger test2;
@property (nonatomic, readonly) NSInteger test3;
@property (nonatomic, readonly) NSInteger test4;
Ale nie deklaruje żadnych Ivars dla nich, mogę @synthesize je w pliku .m jak ten:
@synthesize test1;
@synthesize test2;
@synthesize test3;
@synthesize test4;
i to działa bez problemu, kompilator automatycznie dodaje iVars - sizeof (MyClass) pokazuje, że moja klasa jest (jak można się spodziewać) 16 bajtów większa niż bez tych właściwości zadeklarowanych i zsyntetyzowanych. Jednakże, jeśli nie je syntetyzować i wdrożyć je tak:
- (NSInteger)test1
{
return 0;
}
- (NSInteger)test2
{
return 0;
}
- (NSInteger)test3
{
return 0;
}
- (NSInteger)test4
{
return 0;
}
następnie moja klasa powraca do swojego pierwotnego rozmiaru. Jest to określane na podstawie sizeof WITHIN pliku .m dla MyClass - tak więc kompilator wie na tym etapie, czy zmienne zostały zsyntetyzowane lub zaimplementowane.
Jednak inne klasy nie wiedzą tego po prostu z pliku nagłówkowego, sizeof (MyClass) pokazuje rozmiar BEZ dodatkowych (automatycznych) iVars, niezależnie od tego, czy są syntezowane czy nie. Wydaje mi się to całkowicie pomieszane, że sizeof może zwrócić inną wartość. W jaki sposób kompilator zachowuje się poprawnie podczas podklasy i podczas korzystania z operatora dereference + offset (->
) w publicznych iVar podklasy, jeśli nie może być pewien rozmiaru klasy?
Zadałem następujące pytanie: http://stackoverflow.com/questions/4089316/do-dynamic-ivars-break-the-strict-superset-of-c-paradigm-for-objective-c – jhabbott