1

についていくつかの機能を知りたいですself

  1. selfクラスメソッドに変数を持つコンテキストはどれですか?
  2. メソッドself.selfで許可されているのはなぜですか?init

初め:

クラスがありますExampleClass

@interface ExampleClass:NSObject
@property (nonatomic,strong) NSString* a;

+(ExampleClass*)createExampleClass;

@end

@implementation ExampleClass

-(id)init{
    self = [super init];
    if(self){
        [self.self init]; #Allowed
        [self init]; #Not Allowed ?
    }

}

+(ExampleClass*)createExampleClass{
    /*do work here*/
    NSLog(@"Self: %@ \n Class: %@",self,[self class]);
}
@end

この例では、次のようになります。

Self: ExampleClass
Class: ExampleClass

しかし、なぜ?!

initメソッドでは許可され[self.self init]ていますが、'[self init]' は許可されていません。

なぜこれが起こるのですか?

4

4 に答える 4

4

クラスメソッドでselfは、クラスです。クラスの[self class]場合は単に を返すselfためself、 と[self class]は基本的に同じものです。

メソッドを呼び出し[self init]initも意味がありません。無限再帰が発生します。ただし、発生するコンパイラ エラーは ARC の制限です。使用するself = [self init]と、エラーはなくなりますが、それでも意味がありません。ただし、指定された初期化子を呼び出すために、別の初期化子メソッドでこれを行う場合があります。

于 2013-03-14T10:18:26.630 に答える
0
  1. selfin class method はクラスオブジェクト自体です。

  2. NSObject自分自身をself返すメソッドがあります。

        ここを参照してください:   https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html#//apple_ref/occ/intfm/NSObject/self

    Self: ExampleClass // クラスの名前。Class: ExampleClass // クラス オブジェクトと同じメタクラス オブジェクトの名前。

ポインター アドレスを出力すると、2 つのオブジェクトが異なることがわかります。

ここに素敵なイラストと説明があります。 http://www.sealiesoftware.com/blog/archive/2009/04/14/objc_explain_Classes_and_metaclasses.html

于 2013-03-14T10:17:19.687 に答える
0

self.self[self self]return 以外は何もしないfor の略ですself

于 2013-03-14T10:20:07.130 に答える
-1

self.self.self.self.self.selfも有効です :) または [[self self].self self].self.self

于 2013-12-02T19:30:53.897 に答える