検索

ホームページ  >  に質問  >  本文

objective-c - ios开发中self和下划线的区分

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

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

黄舟黄舟2763日前867

全員に返信(3)返信します

  • PHP中文网

    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] メソッドを再度実行します。これは無限再帰です。

    返事
    0
  • 黄舟

    黄舟2017-04-27 09:04:53

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

    返事
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-04-27 09:04:53

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

    リーリー

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

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

    返事
    0
  • キャンセル返事