NSObject.h
@property (readonly) NSUInteger hash; @property (readonly) Class superclass; : @property (readonly, copy) NSString *description; @optional @property (readonly, copy) NSString *debugDescription;
正確に言うと情報が増えたわけではなく、従来メソッドだったものが readonlyプロパティに変更された。
iOS7の時はこんな感じ。
- (NSUInteger)hash; - (Class)superclass; : - (NSString *)description; @optional - (NSString *)debugDescription;
通常は問題にならないが class_copyPropertyList()を使っていると話が違ってくる。iOS7までは含まれなかったこれらのプロパティが取得できることに注意が必要となる。自分の場合、iOS7の時にエンコードして作成したアーカイブファイルを iOS8でデコードする時にこれが原因で失敗した。
最初はアーカイブの互換性が無くなったかと思い少々びっくりしたが。
アプリで使っていたライブラリ(自作)はこれ。
class_copyPropertyList()でプロパティ名を取得して、それを使ってNSCoding準拠のエンコード/デコードを行うライブラリ。class_copyPropertyList()で hash/superclass/description/debugDescriptionと予期しないプロパティ(しかもreadonly)を拾ってきたことが原因でデコードに失敗していた。
→ どうもそうではないようだ。
(参考)
Retrieving property list of a class in iOS
NSObject has some "new" properties in iOS 8
Responses
Leave a Response