héritage de propriété: la synthèse de propriété automatique ne synthétisera pas la propriété

Résumé:

Cette question est à propos de l'héritage de propriétés en combinaison avec différents de lecture/écriture accède de l'intérieur et à l'extérieur des classes héritant de la propriété de l'un à l'autre.

Détails:

J'ai une classe A et une autre classe Bqui hérite de l' A. Il est la propriété someProperty déclaré dans A. Je veux le bien pour être en lecture seule à partir en dehors de ces classes et de lecture/écriture à partir de l'intérieur.

Avec une seule classe, c'est très simple: Vous déclarer la propriété dans la .h en readonly et vous déclarer en tant que readwrite dans le .m à l'intérieur d'une catégorie. Fait.

Mais avec les deux classes, l'une découlant de l'autre, j'ai le dessous d'avertissement du compilateur dans B:

La propriété d'Auto synthèse ne sera pas synthétiser de la propriété 'someProperty'
parce que c'est "readwrite", mais il sera synthétisé 'readonly' via
une autre propriété

Voici le code:

A. h:

#import <Foundation/Foundation.h>

@interface A : NSObject

//This property shall be readonly from outside, but read/write from subclasses
@property (readonly) SInt32 someProperty;

@end

A. m:

#import "A.h"

@implementation A
@end

B. h:

#import <Foundation/Foundation.h>
#import "A.h"

@interface B : A

@end

B. m:

#import "B.h"    

@interface B ()

//compiler warning in the following property declaration:
///Users/.../B.m:12:41: Auto property synthesis will not synthesize property
//'someProperty' because it is 'readwrite' but it will be synthesized
//'readonly' via another property
@property (readwrite) SInt32 someProperty;

@end

@implementation B
@end

Pourquoi cet avertissement apparaît et comment dois-je organiser mon code pour l'éviter?

source d'informationauteur Daniel S. | 2014-07-04