or que o compilador avisa ao redeclarar a propriedade readwrite da classe base como somente leitura na subclass

O documento da Apple citado mais tarde parece indicar que isso é permitido, embora eu admita que nunca tenha um motivo para fazer isso em uma subclasse até agor

Tenho uma classe base com uma propriedade pública de gravação e uma subclasse em que redeclaro a propriedade como somente leitura. A subclasse também possui uma extensão de classe que novamente redefine a propriedade como readwrite para obter o padrão Objective-C comum "readonly public, private readwrite private". No entanto, recebo o seguinte aviso do compilador:

warning: Semantic Issue: Attribute 'readonly' of property 'foo' restricts attribute 'readwrite' of property inherited from 'Base'

Estou usando o Xcode 4.1 build 4B110 com o LLVM 2.1 (embora o LLVM GCC4.2 e o GCC4.2 dêem o mesmo aviso) na versão 10.

Aqui está um exemplo simplificado que exibe o aviso do compilador:

#import <Foundation/Foundation.h>

@interface Base : NSObject
@property (nonatomic, readwrite) BOOL foo;
@end

@implementation Base
@dynamic foo;
@end

// Subclass
@interface Sub : Base
@property (nonatomic, readonly) BOOL foo;
@end

// Class extension 
@interface Sub ()
@property (nonatomic, readwrite) BOOL foo;
@end

@implementation Sub
@dynamic foo;  // it warns with @synthesize as well
@end

Aqui está uma passagem relevante da AppleA linguagem de programação Objective-C:

edeclaração de Propriedade

Você pode redeclarar uma propriedade em uma subclasse, mas (com exceção de readonly versus readwrite), você deve repetir seus atributos na íntegra nas subclasses. O mesmo vale para uma propriedade declarada em uma categoria ou protocolo - enquanto a propriedade pode ser redeclarada em uma categoria ou protocolo, os atributos da propriedade devem ser repetidos por inteiro.

Se você declarar uma propriedade em uma classe como somente leitura, poderá redefini-la como readwrite em uma extensão de classe (consulte “Extensões”), em um protocolo ou em uma subclasse (consulte “Subclassificação com propriedades”). No caso de uma redeclaração de extensão de classe, o fato de a propriedade ter sido redeclarada antes de qualquer instrução @synthesize faz com que o setter seja sintetizado. A capacidade de redefinir uma propriedade somente leitura como leitura / gravação permite dois padrões comuns de implementação: uma subclasse mutável de uma classe imutável (NSString, NSArray e NSDictionary são exemplos) e uma propriedade que possui uma API pública que é somente leitura, mas implementação de readwrite privada interna à classe. O exemplo a seguir mostra o uso de uma extensão de classe para fornecer uma propriedade declarada como somente leitura no cabeçalho público, mas redeclarada em particular como leitura / gravaçã

Redeclaro as propriedades públicas de somente leitura que são escritas em extensões de classe o tempo todo, mas acho que nunca tive motivos para fazer uma subclasse. No entanto, a menos que eu esteja lendo errado, os parágrafos acima parecem indicar que é kosher. Alguém pode me esclarecer e / ou conciliar o aparente conflito entre os documentos e o compilador?

Por que eu quero fazer isso? Minha situação no mundo real é mais complexa, é claro. Posso fazer alterações no projeto para contornar isso, se necessário, mas essa parecia a alternativa de menor atrito (a necessidade de fazer isso está sendo motivada por outras alterações

questionAnswers(1)

yourAnswerToTheQuestion