AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 77009569
Accepted
Zohar81
Zohar81
Asked: 2023-08-30 23:43:05 +0800 CST2023-08-30 23:43:05 +0800 CST 2023-08-30 23:43:05 +0800 CST

Objective-c:将属性设置为属性,是否保留默认设置

  • 772

如果我为已定义的属性指定属性,它对默认属性配置有什么影响吗?

例如,以下声明是相等的,因为atomic, readwrite and strong默认设置

@property(atomic,readwrite,strong)NSString *name;
@property NSString *name;

如果我用 attribute 声明属性assign,它会保留其他属性吗?

这两个陈述等价吗?

@property (assign) NSString* name;
@property (assign,atomic,readwrite,strong) NSString * name;

如果我更改一个默认属性,会发生什么情况,是否会将另一个属性保留为默认设置?这两个陈述等价吗?

@property (nonatomic,weak) NSString * name;
@property (nonatomic,weak,readwrite) NSString * name; 

我问这个问题是因为当我仅使用属性设置属性时assign,该strong属性看起来不再应用,因为当我使用另一个变量设置它时,它不会保留引用。

objective-c
  • 1 1 个回答
  • 19 Views

1 个回答

  • Voted
  1. Best Answer
    HangarRash
    2023-08-31T01:25:06+08:002023-08-31T01:25:06+08:00

    Objective-C 属性的各种属性被分组为互斥的值集。您只能从每一组中选择一个值。

    • 属性可以是原子的,也可以是非原子的。
    • 属性要么是可读写的,要么是只读的。
    • 属性可以是赋值属性、弱属性、强属性或复制属性。
    • 属性可以为 null,也可以为非 null。

    所以你不能创建一个既是 又是 的assign属性strong。它只能是其中之一。

    从每个组中选取一个值不会影响任何其他组中的值。

    对于引用类型(NSString *例如),默认值是原子的、可读写的和强的,正如您所说的。为一个值显式选择非默认值不会更改其他默认值。

    你问:

    这两个语句等价吗?

    @property (assign) NSString* name;
    @property (assign,atomic,readwrite,strong) NSString * name;
    

    不会,因为一旦选择assign,strong就不会被使用。附带说明一下,永远不要assign与引用类型一起使用,除非您确实有充分且充分理解的理由这样做。

    换句话说,这些是相同的:

    @property (assign) NSString *name;
    @property (assign, atomic, readwrite) NSString *name;
    

    不过,再次强调,不要assign与引用类型一起使用。

    您询问以下是否等效:

    @property (nonatomic,weak) NSString * name;
    @property (nonatomic,weak,readwrite) NSString * name; 
    

    是的,这些是相同的。我一直使用第一个,并且该属性也始终是可读写的。


    我说过你只能从每一组中选择一个值。这实际上只是部分正确。在类的公共接口中,您可以将属性声明为只读。然后在该类的私有类扩展中,您可以将该属性重新声明为可读写。例如:

    .h 文件:

    @interface SomeClass
    
    @property (readonly) NSString *someValue;
    
    @end
    

    .m 文件

    @interface SomeClass ()
    
    @property (readwrite) NSString *someValue;
    
    @end
    

    这样做的作用是向类的用户公开一个只读属性,但允许类的私有实现也向该属性写入值。

    • 2

相关问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    使用 <font color="#xxx"> 突出显示 html 中的代码

    • 2 个回答
  • Marko Smith

    为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类?

    • 1 个回答
  • Marko Smith

    您可以使用花括号初始化列表作为(默认)模板参数吗?

    • 2 个回答
  • Marko Smith

    为什么列表推导式在内部创建一个函数?

    • 1 个回答
  • Marko Smith

    我正在尝试仅使用海龟随机和数学模块来制作吃豆人游戏

    • 1 个回答
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 个回答
  • Marko Smith

    为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)?

    • 4 个回答
  • Marko Smith

    为什么库中不调用全局变量的构造函数?

    • 1 个回答
  • Marko Smith

    std::common_reference_with 在元组上的行为不一致。哪个是对的?

    • 1 个回答
  • Marko Smith

    C++17 中 std::byte 只能按位运算?

    • 1 个回答
  • Martin Hope
    fbrereto 为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 您可以使用花括号初始化列表作为(默认)模板参数吗? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi 为什么列表推导式在内部创建一个函数? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A fmt 格式 %H:%M:%S 不带小数 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python C++20 的 std::views::filter 未正确过滤视图 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute 为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa 为什么库中不调用全局变量的构造函数? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis std::common_reference_with 在元组上的行为不一致。哪个是对的? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev 为什么编译器在这里错过矢量化? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan C++17 中 std::byte 只能按位运算? 2023-08-17 17:13:58 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve