Ios 属性的空访问器方法

Ios 属性的空访问器方法,ios,Ios,我是iOS新手,试图理解一些需要翻译成Java的目标C代码 在.h文件中,有许多方法声明如下: @interface SomeClass : NSObject<NSCoding> // Some score - (int)score; @end 但是在SomeClass中声明的访问器方法分数从未在任何地方实现 因此,我的问题是: 是否通常将属性放在.m文件中,即使它写在@interface中(对我来说,它属于.h文件) 为什么会有一个未实现的访问器方法(或者是其他方

我是iOS新手,试图理解一些需要翻译成Java的目标C代码

在.h文件中,有许多方法声明如下:

@interface SomeClass : NSObject<NSCoding>
    // Some score
    - (int)score;
@end
但是在SomeClass中声明的访问器方法分数从未在任何地方实现

因此,我的问题是:

  • 是否通常将属性放在.m文件中,即使它写在@interface中(对我来说,它属于.h文件)

  • 为什么会有一个未实现的访问器方法(或者是其他方法?)@属性自动创建访问器方法,因此这似乎是无用的。这是否只是为了让人们可以对该方法进行评论


  • 请注意,在我看来,您附加的代码是一种糟糕的做法,因为它们应该在头中有一个readonly属性,然后在类扩展中将其重新声明为notreadonly

    除此之外:

  • 即使属性写在@interface(对我来说,它属于.h文件)中,也通常将属性放在.m文件中吗
  • 如果在头中有一个只读属性,并且希望在实现文件中添加一个setter方法供内部使用,则可以在类扩展中重新声明该属性,然后将为您创建setter。因此,您不必自己编写setter

    在您的例子中,程序员有一个带有getter和setter的属性,但只想公开getter方法

  • 为什么会有一个未实现的访问器方法(或者是其他方法?)@属性自动创建访问器方法,因此这似乎是无用的。这是否只是为了让人们可以对该方法进行评论
  • 访问器方法实际上并不是未实现的,它只是自动创建的。带有最新版本LLVM的@property声明将通过一个称为autosynthesis的过程。此自动合成将查看@property声明,并为其生成相应的setter和accessor方法

    程序员只是想公开getter方法,这就是为什么他们把它放在公共类接口中

    下面是一个自动生成的getter和setter示例:

    @interface MyClass ()
    
    @property (nonatomic) int integerOne;
    @property (nonatomic, readonly) int integerTwo;
    @property (nonatomic, readonly, getter = myIntegerThree) int integerThree;
    
    @end
    
    这些措施的作用如下:

    integerOne:生成名为
    \u integerOne
    的实例变量,创建名为
    integerOne
    的getter方法,并创建名为
    setIntegerOne:

    integerTwo:生成名为
    \u integerTwo
    的实例变量,创建名为
    integerTwo的getter方法

    integerThree:生成名为
    \u integerThree
    的实例变量,创建名为
    myIntegerThree


    您可以通过实现自动生成的方法来避免自动合成。如果您实现了所有自动生成的方法,那么您还必须自己合成实例变量。例如,如果我声明了一个只读属性,然后重写了自动创建的getter,那么我必须将
    @synthesis property=\u属性在我的实现文件的顶部,这样我就可以得到一个名为
    \u property

    的实例变量。请注意,我认为您附加的代码是不好的做法,因为它们应该在头中有一个readonly属性,然后在类扩展中将其重新声明为not readonly

    除此之外:

  • 即使属性写在@interface(对我来说,它属于.h文件)中,也通常将属性放在.m文件中吗
  • 如果在头中有一个只读属性,并且希望在实现文件中添加一个setter方法供内部使用,则可以在类扩展中重新声明该属性,然后将为您创建setter。因此,您不必自己编写setter

    在您的例子中,程序员有一个带有getter和setter的属性,但只想公开getter方法

  • 为什么会有一个未实现的访问器方法(或者是其他方法?)@属性自动创建访问器方法,因此这似乎是无用的。这是否只是为了让人们可以对该方法进行评论
  • 访问器方法实际上并不是未实现的,它只是自动创建的。带有最新版本LLVM的@property声明将通过一个称为autosynthesis的过程。此自动合成将查看@property声明,并为其生成相应的setter和accessor方法

    程序员只是想公开getter方法,这就是为什么他们把它放在公共类接口中

    下面是一个自动生成的getter和setter示例:

    @interface MyClass ()
    
    @property (nonatomic) int integerOne;
    @property (nonatomic, readonly) int integerTwo;
    @property (nonatomic, readonly, getter = myIntegerThree) int integerThree;
    
    @end
    
    这些措施的作用如下:

    integerOne:生成名为
    \u integerOne
    的实例变量,创建名为
    integerOne
    的getter方法,并创建名为
    setIntegerOne:

    integerTwo:生成名为
    \u integerTwo
    的实例变量,创建名为
    integerTwo的getter方法

    integerThree:生成名为
    \u integerThree
    的实例变量,创建名为
    myIntegerThree


    您可以通过实现自动生成的方法来避免自动合成。如果您实现了所有自动生成的方法,那么您还必须自己合成实例变量。例如,如果我声明了一个只读属性,然后重写了自动创建的getter,那么我必须将
    @synthesis property=\u属性在我的实现文件的顶部,这样我就可以得到一个名为
    \u property

    的实例变量。请注意,我认为您附加的代码是不好的做法,因为它们应该在头中有一个readonly属性,然后在类扩展中将其重新声明为not readonly