【问题标题】:@property declaration and curly brackets declarion [duplicate]@property 声明和大括号声明 [重复]
【发布时间】:2013-08-22 11:35:08
【问题描述】:

我知道这是一个愚蠢的问题,但是这个@property 声明和大括号内的声明有什么区别,或者我也可以这样做

@property(nonatomic, strong) NSMutableString *current

也列出而不是写在大括号内

@interface XMLParser : NSObject <NSXMLParserDelegate>
{

    NSMutableString *currentList;
    NSXMLParser *parser;
    dataFileHolder *dataCurrent;
}

@property(nonatomic, strong) NSMutableArray *listPopulated;

【问题讨论】:

  • 如果您在大括号内声明任何对象,则该对象仅使用该类
  • 所以当我把它写在括号内并且@properties 是公开的时它是私有的,你的意思是这样吗?

标签: ios objective-c


【解决方案1】:

如果您使用@property 声明,getter 和 setter 将根据您为属性设置的参数自动生成。在此示例中,setter 和 getter 将是非原子的,并与强引用一起保存。

另一方面,如果你在大括号中定义它,只会创建变量(没有getter和setter)

Here is a more complete explanation than mine

【讨论】:

    【解决方案2】:

    如果您在大括号内声明任何对象,则该对象仅使用该类 @interface XMLParser : NSObject {

    NSMutableString *currentList;
    NSXMLParser *parser;
    dataFileHolder *dataCurrent;
    

    }

    但是如果你像这样使用@property 来声明你的对象

    @property(nonatomic, strong) NSMutableArray *listPopulated;

    这意味着你也可以在另一个类中使用这个 NSMutableArray

    @property 和综合类似 getter setter method @property 作为 setter 和 @synthesis 作为 getter 之间存在关系

    【讨论】:

    • 如果你定义为public,你可以在其他类中使用实例变量...
    • 另外,您关于属性是 setter 并综合 getter 的评论是错误的。 Synthesize 生成由属性定义的 getter 和 setter。已经有一段时间了,因为不再需要合成了
    • 另外,声明@property(nonatomic, strong) NSMutableArray *listPopulated;并不意味着您可以在另一个类中使用 NSMutableArray,而是 listPopulated(只要包含 .h)
    • @property(nonatomic, strong) NSMutableArray *listPopulated;为什么我不能在另一个课程中使用它。如果我在 A 类中声明它并想在 B 中使用它而不是像 A.listPopulated 一样使用它
    • listPopulated 可以在另一个类中使用(只要包含 .h)。但是 NSMutableArray 只是类型。
    猜你喜欢
    • 2011-01-10
    • 2020-03-28
    • 2012-03-10
    • 2012-04-07
    • 2010-10-21
    • 2016-12-26
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多