今天碰到一个问题,就是用到懒加载的时候,我用了self,结果报错直接蹦了,
我们老师说这是self递归引用了,可我还是不明白它们之间的区别
PHP中文网2017-04-27 09:04:53
self.x はプロパティにアクセスするためのものですが、実際には getX メソッドまたは setX メソッドにアクセスするためのものですが、ほとんどの場合、コンパイラーはこれら 2 つのメソッドを自動的に実装し、関連するインスタンス変数を自動的に作成します。よりも。 _x は、自動的に作成されるインスタンス変数です。
たとえば、次の属性を定義します:
次のような隠された (簡略化された) コードがたくさんあります:
リーリー遅延読み込みコードが属性の get メソッドをオーバーロードしていると思います。self.x は実際には [self x] メソッドを呼び出します。get メソッドで self.x を使用すると、この self.x が [self] を呼び出します。 x] メソッドを再度実行します。これは無限再帰です。
黄舟2017-04-27 09:04:53
参照すれば違いはありません、同じポインタですが代入すると違います self.xx=oo まずxxretaincount -1して、次にretain oo _XXをコピーして直接ooを指すようにしています。保持ステップはありません。それも
曾经蜡笔没有小新2017-04-27 09:04:53
私はあなたが次のような人かもしれないと推測しました:
リーリーその後、self.some を呼び出すと、[self some] を使用するのと同じになり、some 内の self.some は再度 [self some] を呼び出します。 。 。ループが形成されます。 。 。
アンダースコアは、set と get をバイパスして直接アクセスすることを意味します。 。