问题标签 [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.

0 投票
1 回答
959 浏览

ios - 使用 NSMutableString 属性时出错“尝试使用 appendString 改变不可变对象:”

当我将字符串附加到NSMutableStringusing时appendString:,出现以下错误:

我的代码是:

在我的头文件中:

我不明白为什么它说对象是不可变的,因为它是一个NSMutableString. 为什么[self.partialWord appendString:@"-"];零件不起作用?

0 投票
2 回答
101 浏览

objective-c - 我什么时候应该在标头中声明实例变量而不是属性?

例如,在以下代码中。

在哪种情况下我们使用第一种方法来声明变量?

0 投票
1 回答
102 浏览

objective-c - 为什么我不能在“独立”块中使用点符号?

关于 Objective-c 块,我正在阅读的文档说:

您不能self在独立块对象中引用。如果需要,您必须将self对象作为参数传递给块。

您无法使用点符号访问独立块内对象的属性。如果您需要这样做,请使用 setter 和 getter 方法。

但我可以编写以下内容,并且它按预期运行。

那么,为什么规则说不能使用点符号呢?

0 投票
1 回答
97 浏览

objective-c - 在原始类中找不到类别中定义的属性

我有一个非常大的班级,我正在尝试从中创建一个类别。在原始类的 .m 文件中,我有 2 个对象(在类别 .h 文件中定义)出现“未识别的标识符”构建错误。

这是 UploadViewController+CreateExportFiles.h 类中其中之一的对象定义:

原始类 (UploadViewController.h) 的 .h 文件如下所示:

booksArray并且在我遇到错误的类中的用法是:

我还需要做些什么来解决错误吗?

0 投票
3 回答
111 浏览

objective-c - 在 Objective-C 声明的属性的上下文中,“返回”是什么意思?

阅读一些关于属性和实例变量的 Objective-C 手册,我遇到了很多类似的句子

属性readwrite将由实例变量支持。

或者

属性通常由带有前导下划线的实例变量支持firstName,因此创建一个名为的属性将具有一个具有名称的支持实例变量_firstName

什么是“支持”变量?文中为何用“回”字?究竟是什么意思?

0 投票
1 回答
248 浏览

objective-c - 如果在类扩展中重新定义属性的内存管理是否可以更改?

如果我有这样的财产:

在实现文件中重新定义为读/写:

我在.h 中使用了weak,但我在扩展中什么也没说,该属性会保留“weak”说明符,还是会更改为“strong”?

重新定义属性时是否会覆盖关键字strong/assign/weak?

0 投票
1 回答
975 浏览

objective-c - 为什么我必须在标头中声明由协议指定的属性,而不是类扩展(实现)

所以我有一个协议,它需要声明一个属性:

以及符合它的对象:

但是,如果我在实现文件(类扩展名)中声明属性(在协议中指定):

我收到此错误:

在类扩展“MyViewController”中非法重新声明属性(属性必须是“readwrite”,而其主要属性必须是“readonly”)

似乎有两个主要的 SO 线程解决了这个问题:
属性必须是读写的,而它的主线程必须是只读的
,并且
不能声明另一个窗口

第一个答案没有解释任何事情

第二个答案说,您实际上可以通过在标头内声明属性来规避此错误;唉

标题

执行

这构建没有错误。

我也知道,当您声明@property协议内部时,它不会自动合成。

因此,如果我想将@property声明保留在实现中,我将不得不这样@synthesize做。这也有效。


所以我的问题是,如果最初在协议内部声明,为什么声明@property头文件内部与实现文件很重要?@property

如果没有协议,我认为唯一的区别是@property公开或私有。@property但显然,如果您在标头与实现文件中声明 a ,还会发生/不发生其他事情

0 投票
2 回答
63 浏览

ios - Objective-C 属性实际上需要声明 strong 吗?

到目前为止,我的理解是(保留)增加了属性的引用计数,并且与(强)基本相同。由于默认情况下所有属性都设置为保留(除非另有说明),因此根本需要添加(强):

是相同的:

上面两个是一样的,对吧?

0 投票
1 回答
228 浏览

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 的传统解释是什么。

0 投票
1 回答
185 浏览

objective-c - 如果一个属性被定义为副本,我在分配给 ivar 时还需要做一个副本吗?

假设我有一个属性定义为@property (copy) NSString *name.

假设我有一个init定义如下的方法。

我需要注释行中的副本还是 ARC 会根据copy属性声明中的处理它,就像在综合设置器中一样?