今天碰到一個(gè)問(wèn)題,就是用到懶加載的時(shí)候,我用了self,結(jié)果報(bào)錯(cuò)直接蹦了,
我們老師說(shuō)這是self遞歸引用了,可我還是不明白它們之間的區(qū)別
人生最曼妙的風(fēng)景,竟是內(nèi)心的淡定與從容!
self.x はプロパティにアクセスするためのものですが、実際には getX メソッドまたは setX メソッドにアクセスするためのものですが、ほとんどの場(chǎng)合、コンパイラーはこれら 2 つのメソッドを自動(dòng)的に実裝し、関連するインスタンス変數(shù)を自動(dòng)的に作成します。よりも。 _x は、自動(dòng)的に作成されるインスタンス変數(shù)です。
たとえば、次の屬性を定義します:
次のような隠された (簡(jiǎn)略化された) コードがたくさんあります:
リーリー遅延読み込みコードが屬性の get メソッドをオーバーロードしていると思います。self.x は実際には [self x] メソッドを呼び出します。get メソッドで self.x を使用すると、この self.x が [self] を呼び出します。 x] メソッドを再度実行します。これは無(wú)限再帰です。
參照すれば違いはありません、同じポインタですが代入すると違います self.xx=oo まずxxretaincount -1して、次にretain oo _XXをコピーして直接ooを指すようにしています。保持ステップはありません。それも
私はあなたが次のような人かもしれないと推測(cè)しました:
リーリーその後、self.some を呼び出すと、[self some] を使用するのと同じになり、some 內(nèi)の self.some は再度 [self some] を呼び出します。 。 。ループが形成されます。 。 。
アンダースコアは、set と get をバイパスして直接アクセスすることを意味します。 。