OC動的データ型構築方法やクラスファクトリなどの知識点についての学習

3668 ワード

iOS学習ノートの整理


@property


@propertyは、getter/setterメソッドを生成する宣言の代わりにXcode 4で宣言できるコンパイラの命令です.Xバージョン後@propertyは、getter/setterメソッドを生成する宣言の代わりに、getter/setterメソッドの実装を生成したり、帯域を生成したりすることができます.のメンバー変数、たとえば@porporty int ageが生成されます.
- (void)setAge:(int)age;
- (int)age;
int _age;

@synthesizeは、getter/getterメソッドを生成する代わりに実装できるようにコンパイラ命令でもありますが、その機能は@propertyに置き換えられています.
@propertyには2つの修飾子があります.1つはreadwrite読み書き機能(デフォルト)です.1つはreadonly読み取り専用機能例です.@property(readonly)NSString *name@propertyはgetter/setterの名前を変更することもできます.たとえば、
@property(getter = isMan) BOOL Sex;
[p setSex:YES/NO];
If(isMan){
                xxx
}
//getter = isXxxx   BOOL 

idデータ型


idデータ型は動的データ型id==NSObject *==万能ポインタを定義変数として、関数のパラメータとして、関数の戻り値としてサブクラスにアクセスできる特有の方法でプライベートメソッド(Xcode 8.x)を呼び出すことができますが、この機能はすでにないようです.動的データ型で変数を定義すると、動的データ型に属さない属性やメソッドにアクセスした場合、コンパイラはエラーを報告しません(ランタイムエラー).静的データ型は適用シーンを誤報する:多態、コード量を減らすことができる、避けるなどのテテのある方法は、実行時にエラーが発生しないようにタイプ変換を強制する必要がある.一般的にidで変数を定義する場合、呼び出しを行う前に一度判断し、現在の変数がこの方法例を呼び出すことができるかどうかを判断する.
id obj = [[Student alloc] init];
If([obj is kingOfClass:[Person class]])
{

}
// 
If([obj is memberOfClass:[Person class]])
{

}
// 

構築方法


OCの中でinitの冒頭の方法を構造方法と呼んでinitを書き換えるにはアップルの規定のフォーマットに従わなければならない:1.親2を初期化します.親が初期化するか否かを判断し、子3を初期化する.selfを返すには、次のようにします.
if(self = [super init])
{
    
}
return self;

instancetype


万能ポインタとidの違いは、コンパイル時に真のタイプinstancetypeが戻り値としてしか使用できないことを知ることです.

カスタム構築方法


適用シーン:サーバデータinitの後の頭文字を取得するには、必ず大文字の規範を必要とします:1.きっとオブジェクトメソッド2に違いない.必ずidまたはinstancetype 3を返す.メソッド名はinitで始まる必要があります注意:プロパティ名、メソッド名はnewで始まる必要はありません:
-(instancetype)initWithAge:(int)age
{
    if(self = [super init])
    {
        _age = age;
    }
    return self;
}
//or
-(instancetype)initWithAge:(int)age andWithHeight:(double)height
{
    if(self = [super initWithAge:age])
    {
        _height = height;
    }
    return self;
}

カスタムクラスファクトリメソッド


仕様:1.クラスオブジェクトメソッド2に違いない.名前は類名詞で始まり、頭文字は小文字である.範囲値が一定で、戻りタイプがid/instancetypeである必要があります.たとえば、次のようにします.
+ (instancetype)person
{
    return [[Person alloc] init];
}
Person *p = [self person]
//----------------------------------------
+ (instancetype)personWithAge:(int)age
{
    Person *p = [[self alloc] init];
    p.age = age;
    return p;
}

カスタムコンストラクションメソッドとカスタムクラスファクトリメソッドはアップルの仕様です.一般的には、カスタムコンストラクションメソッドとカスタムクラスファクトリメソッドでオブジェクトを作成します.ただし、後でカスタムクラスファクトリを使用する場合は、クラスファクトリメソッドでオブジェクトを作成するにはselfを使用する必要があります.

クラスの開始プロセス


loadメソッド


プログラムが起動されると自動的にloadというクラスメソッドが実行され、このクラスメソッドが呼び出されるかどうかにかかわらず実行されます.まず親loadを実行し、サブクラスloadを実行します.
+(void)load
{
    NSlog(@"%s",__func__)
}

initializeメソッド


このクラスメソッドが最初に実行されると、親クラスinitializeが実行され、サブクラスinitializeが実行されます.
+(void)initialize
{
    NSlog(@"%s",__func__)
}

SELタイプ


メソッドの署名を表し、クラスオブジェクトのメソッドのメソッドリストにその署名のメソッドコードの対応関係作用が格納されています.
SEL sel = @selector(xxx);
BOOL flag = [p respondsTOSelector:sel];
NSLog(@"%d",flag);

役割2:オブジェクト/クラスに合わせてメソッドを呼び出す
SEL sel1 = @selector(xxx)
[p perforSeletor:sel1]// 
[p perforSeletor:sel1 withObject:]// 
//perforSeletor 2 

作用3:方法としての形参
-(void)run;
SEL sel = @selector(run)
-(void)makeObject:(id)obj andSel:(SEL)sel

Car *c = [[Car alloc] init];
Person *p = [[Person alloc] init];
[Person makeObject:c andSel:run];
//