objective-c - ios开发中self和下划线的区分
黄舟
黄舟 2017-04-27 09:02:53
0
3
817

今天碰到一个问题,就是用到懒加载的时候,我用了self,结果报错直接蹦了,

我们老师说这是self递归引用了,可我还是不明白它们之间的区别

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全員に返信(3)
洪涛

self.x はプロパティにアクセスするためのものですが、実際には getX メソッドまたは setX メソッドにアクセスするためのものですが、ほとんどの場合、コンパイラーはこれら 2 つのメソッドを自動的に実装し、関連するインスタンス変数を自動的に作成します。よりも。 _x は、自動的に作成されるインスタンス変数です。
たとえば、次の属性を定義します:

リーリー

次のような隠された (簡略化された) コードがたくさんあります:

リーリー

遅延読み込みコードが属性の get メソッドをオーバーロードしていると思います。self.x は実際には [self x] メソッドを呼び出します。get メソッドで self.x を使用すると、この self.x が [self] を呼び出します。 x] メソッドを再度実行します。これは無限再帰です。

いいねを押す +0
黄舟

参照すれば違いはありません、同じポインタですが代入すると違います self.xx=oo まずxxretaincount -1して、次にretain oo _XXをコピーして直接ooを指すようにしています。保持ステップはありません。それも

いいねを押す +0
曾经蜡笔没有小新

私はあなたが次のような人かもしれないと推測しました:

リーリー

その後、self.some を呼び出すと、[self some] を使用するのと同じになり、some 内の self.some は再度 [self some] を呼び出します。 。 。ループが形成されます。 。 。

アンダースコアは、set と get をバイパスして直接アクセスすることを意味します。 。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!