1

これはばかげた質問だと思いますが、正直わかりません。

私はクラスを持っていますが、RemoteConfiguration現在その機能はすべてインスタンスメソッドです。これはそうなので、次のように使用する必要があります。

RemoteConfiguration* configs = [[RemoteConfiguration alloc] init];
[configs updateSettings];
[configs release];

クラスメソッドである可能性があり、次のように呼び出される1つのメソッドを使用するためだけにオブジェクトを作成する必要がないため、これは面倒です。

[RemoteConfiguration updateSettings];

しかし、メソッドを から に変更すると、-Xcode+は でアクセスするすべてのオブジェクトについて不平を言い、代わりselfに を使用することを提案します->。(これも警告の原因になります)これはわかりません。メソッドに関係なく、オブジェクトには引き続きメンバー変数があります。ではなぜ->必要なのでしょうか?また、クラス メソッドでメンバー変数を使用するにはどうすればよいですか?

4

3 に答える 3

5

クラス メソッド内では、キーワードselfはそのクラス タイプのインスタンスを参照するのではなく、実際のclassインスタンスを参照します[RemoteConfiguration class]

このようなクラス インスタンスにはインスタンス変数がありません(少なくとも宣言しているものではなく、Classインスタンス変数、特にisaインスタンス変数)。

単一の静的インスタンスが必要な場合は、インスタンス変数をファイル内のRemoteConfiguration変数として宣言するか、シングルトン パターンのようなものを使用してインスタンスを便利に保つことができます。static.m

于 2013-07-08T15:55:17.003 に答える
1

selfコードを見ないと、クラスメソッドにしたいメソッド内から参照しているように聞こえます。

selfクラスのインスタンスではなく、クラスに対してアクションを実行しているため、参照できません。したがってself、期待するものを参照しません。

本当にクラス メソッドにしたい場合は、メソッドを変更する必要があります。ローカル変数と操作する変数しかないことに注意してくださいstatic。プロパティまたはインスタンス変数がある場合、それらにもアクセスできません。

于 2013-07-08T15:56:59.517 に答える
-4

「self」はインスタンスを指します。クラス メソッドには、関連付けられたインスタンスはありません。

基本的に、クラス メソッドを呼び出した場合、「メンバー変数を保持する」「オブジェクト」は、特定の個々のオブジェクトではなく、クラス全体のメソッドであるため、メソッドによって「認識」されません。

おそらくクラス メソッドを渡すことができますが、そもそもなぜクラス メソッドを使用するのでしょうか。(要するに:しないでください。)

理論的には、インスタンス変数の代わりにクラス変数を使用する可能性もありますが、それはすべて依存します。

于 2013-07-08T15:54:10.880 に答える