Objective-Cクラスの拡張


Objective-Cクラスの拡張
クラスに関するメモ
-既存のクラスに「category」でメソッドを追加
クラスOYCatが定義されています.しかし、OYCatのソースコードを直接変更することができない場合、OYCatに新しいメソッドを追加するには、カテゴリを追加することができます.
機能:
(1).mファイルを持たないクラスにメソッドを追加する(2)クラス内のメソッドは,サブクラスが自動的に継承する(3)複数人で同じクラスを開発するのに有利である,(4)1つのクラスの部分メソッドのみが必要な場合には,importの部分メソッドのヘッダファイルのみが可能であり,コード量の削減に有利である.
汎用フォーマット:
定義:
@interface ClassName (CategoryName) method1;

@end

実装:
@implementation ClassName (CategoryName) method1{

}

@end

OYCatの場合:
定義:
@interface OYCat (meow) method1;
 method2;

@end

実装:
@implementation OYCat (meow) method1{…}
 method2{…}

@end

このように追加する方法は、OYCatおよびそのサブクラスで使用できます.通常、このような方法の定義と実現は単独のヘッダファイルとソースファイルの中に置かれ、命名は通常「クラス名+カテゴリ」であり、例えばOYCat+meowである.hとOYCat+meow.m.(実は現在のXcodeは、ファイルを新規作成するときにcategoryを選択し、自動的に名前を付けてくれます)使うときは、新しいメソッドのヘッダファイルincludeを入れることを忘れないでください.Note:(1)使うときは、新しいメソッドのヘッダファイルincludeを入れることを忘れないでください.(2)クラスにインスタンス変数を追加することはできません.(3)クラスに新たに定義する方法であって、メソッド名は使用済みであってはならない.例えば、OYCatクラス(またはその親)の元のメソッドと名前を変更することはできないし、OYCat(またはその親)の他のカテゴリのメソッドと名前を変更することもできない.Best Practice:名前の変更を避けるために、method 1をoy_method 1に変更するなどのメソッド名に接頭辞を付けることを推奨する.
-クラスの拡張(匿名クラスとも呼ばれる)
クラスを直接拡張し、クラスに新しいメソッドとプロパティを追加します.これらのメソッドは内部メソッドと内部プロパティに属し、オブジェクト自体のみが操作できます.新しい属性とメソッドの定義と実装には、次の方法が必要です.
機能:
クラスにプライベートメソッドとプライベートプロパティを追加します.
定義:
@interface ClassName ()
@property NSObject *extraProperty;
 method1;
 method2;
@end

実装:
新しいプロパティの場合、コンパイラはそのクラス自体にあるプロパティが同じである場合、getterメソッドとsetterメソッドを自動的に実装します.新しい方法には、このクラス自体に直接必要です.mファイルで実装し,実装方法は従来の方法と同様である.
Note:このメソッドは、プロジェクト内のアクティブファイルへのクラス追加メソッド、すなわち、クラスと新しく追加されたメソッドを同時にコンパイルする必要がある場合にのみ適用されます.NSStringのようにソースコードを直接変更できないOCが持つクラスは適切ではありません.
用途:
一部のプロパティをクラスオブジェクトに対してreadwrite、他のクラスオブジェクトに対してreadonlyにします.具体的には、元のヘッダファイルにreadonlyとして宣言されたプロパティ
@interface OYCar : NSObject
@property (readonly)NSString * name;
@end

はい.mファイルで(@implementationの前)を再度宣言し、readwriteと宣言します.
@interface OYCar ()
@property (readwrite)NSString *name;
@end

@implementation OYCar@end

このクラスのオブジェクトメソッドでは、[self setName:@newName]またはself.name=@“newName”;名前の値を変更しました.このときnameは他のクラスのオブジェクトに対して読み取り専用です.
この文章は私が公式文書を見ながらまとめたものです.