问题标签 [declared-property]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios - 使用 NSMutableString 属性时出错“尝试使用 appendString 改变不可变对象:”
当我将字符串附加到NSMutableString
using时appendString:
,出现以下错误:
我的代码是:
在我的头文件中:
我不明白为什么它说对象是不可变的,因为它是一个NSMutableString
. 为什么[self.partialWord appendString:@"-"];
零件不起作用?
objective-c - 我什么时候应该在标头中声明实例变量而不是属性?
例如,在以下代码中。
和
在哪种情况下我们使用第一种方法来声明变量?
objective-c - 为什么我不能在“独立”块中使用点符号?
关于 Objective-c 块,我正在阅读的文档说:
您不能
self
在独立块对象中引用。如果需要,您必须将self
对象作为参数传递给块。您无法使用点符号访问独立块内对象的属性。如果您需要这样做,请使用 setter 和 getter 方法。
但我可以编写以下内容,并且它按预期运行。
那么,为什么规则说不能使用点符号呢?
objective-c - 在原始类中找不到类别中定义的属性
我有一个非常大的班级,我正在尝试从中创建一个类别。在原始类的 .m 文件中,我有 2 个对象(在类别 .h 文件中定义)出现“未识别的标识符”构建错误。
这是 UploadViewController+CreateExportFiles.h 类中其中之一的对象定义:
原始类 (UploadViewController.h) 的 .h 文件如下所示:
booksArray
并且在我遇到错误的类中的用法是:
我还需要做些什么来解决错误吗?
objective-c - 在 Objective-C 声明的属性的上下文中,“返回”是什么意思?
阅读一些关于属性和实例变量的 Objective-C 手册,我遇到了很多类似的句子
属性
readwrite
将由实例变量支持。
或者
属性通常由带有前导下划线的实例变量支持
firstName
,因此创建一个名为的属性将具有一个具有名称的支持实例变量_firstName
什么是“支持”变量?文中为何用“回”字?究竟是什么意思?
objective-c - 如果在类扩展中重新定义属性的内存管理是否可以更改?
如果我有这样的财产:
在实现文件中重新定义为读/写:
我在.h 中使用了weak,但我在扩展中什么也没说,该属性会保留“weak”说明符,还是会更改为“strong”?
重新定义属性时是否会覆盖关键字strong/assign/weak?
objective-c - 为什么我必须在标头中声明由协议指定的属性,而不是类扩展(实现)
所以我有一个协议,它需要声明一个属性:
以及符合它的对象:
但是,如果我在实现文件(类扩展名)中声明属性(在协议中指定):
我收到此错误:
在类扩展“MyViewController”中非法重新声明属性(属性必须是“readwrite”,而其主要属性必须是“readonly”)
似乎有两个主要的 SO 线程解决了这个问题:
属性必须是读写的,而它的主线程必须是只读的
,并且
不能声明另一个窗口
第一个答案没有解释任何事情
第二个答案说,您实际上可以通过在标头内声明属性来规避此错误;唉
标题
执行
这构建没有错误。
我也知道,当您声明@property
协议内部时,它不会自动合成。
因此,如果我想将@property
声明保留在实现中,我将不得不这样@synthesize
做。这也有效。
所以我的问题是,如果最初在协议内部声明,为什么声明@property
头文件内部与实现文件很重要?@property
如果没有协议,我认为唯一的区别是@property
公开或私有。@property
但显然,如果您在标头与实现文件中声明 a ,还会发生/不发生其他事情
ios - Objective-C 属性实际上需要声明 strong 吗?
到目前为止,我的理解是(保留)增加了属性的引用计数,并且与(强)基本相同。由于默认情况下所有属性都设置为保留(除非另有说明),因此根本需要添加(强):
是相同的:
上面两个是一样的,对吧?
objective-c - Objective-C API 中只读属性值的安全变异和使用
考虑一个 C++ API,例如const T* foo()
. 这清楚地记录了 API 支持的可变性和使用:好的,我们让你看看 T,但请不要更改它。你仍然可以改变它,但你必须明确地使用const_cast
来表明你不遵循 API 的意图。
Objective-C API 的很大一部分由属性声明组成。API 的用户应该如何解释:@property (readonly) T foo
?(假设 T 不是不可变类型)
- 由于 setter 没有合成,显然
foo
不意味着要被替换。 - 但是,getter 仍然给了我一个指向
foo
. 突变 foo 是否安全?(显然我可以)
注意:我不是在询问语言规范。我问的是在 Objective-C 社区中对这样的 API 的传统解释是什么。
objective-c - 如果一个属性被定义为副本,我在分配给 ivar 时还需要做一个副本吗?
假设我有一个属性定义为@property (copy) NSString *name
.
假设我有一个init
定义如下的方法。
我需要注释行中的副本还是 ARC 会根据copy
属性声明中的处理它,就像在综合设置器中一样?