问题标签 [ivar]

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 投票
2 回答
299 浏览

ios - 使用隐藏属性与私有 iVar

这个问题特别关注静态库/框架;换句话说,其他人最终会接触到的代码。

我在属性方面相当精通,因为我在 iOS 6 发布时就开始了 iOS 开发。我使用了在接口扩展中声明的隐藏属性来完成我所有的“私有”属性工作,包括readonly在我不希望其他人修改的面向公众的属性上以及readwrite在接口扩展中使用。

重要的是,如果我不允许,我希望使用这些静态库/框架的其他人访问这些属性,如果我让他们阅读,我也不希望他们编写这些属性。

我已经知道他们理论上可以创建自己的接口扩展并自己制作我的readonly属性readwrite,或者猜测隐藏属性的名称。

如果我想防止这种情况,我应该使用@private带有直接声明 ivars 的标签的 ivars 吗?这样做有潜在的失败吗?它真的让我获得了额外的安全措施,还是红鲱鱼?

0 投票
1 回答
396 浏览

objective-c - 从类别设置 ivar 值

我使用一个特定的 API,它有一些类,例如ClassA.

ClassA有一个属性importantProperty,ivar = _importantProperty,setter =setImportantProperty

我实际上需要的是在调试时处理属性更改,以及为该属性设置什么值并打印堆栈跟踪。

在我的情况下,我不能继承这个类并覆盖这个方法,因为它已经定义了类。

所以我创建了一个调试类别,它覆盖了setImportantProperty方法,现在我可以处理堆栈跟踪和值的更改,但是这种方法使原始方法无法访问,并且 ivar 值无法更改。有什么办法可以改变这个 ivar 吗?

这是我的方法:

所以问题是有什么方法可以在我的方法中实现这样的代码_importantProperty = newValue,或者在我的情况下还有其他方法可以使用吗?

提前致谢!

0 投票
1 回答
4462 浏览

objective-c - 为什么类别不能有实例变量?

我知道我们可以使用关联引用在类别中调用类似 ivar 的行为。但是,无法在类别中声明新 ivars 的具体原因是什么?

是因为我们会侵犯班级的私人空间吗?还是有其他原因?如果是的话,我会很感激一个例子,它显示了在类别中声明 ivars 打破它打破的能力。

0 投票
3 回答
577 浏览

objective-c - 如何在 Xcode 中找到未使用的 ivars

有时我声明一个 ivar,但过了一段时间我不再使用它。我想从我的代码中删除这种杂乱无章的东西,但我找不到可以显示我未使用的 ivars 的警告。

是否有 Xcode 的工具或内置功能可以让我找到所有未使用的 ivars?

我看到静态分析器有 CLANG_ANALYZER_OBJC_UNUSED_IVARS,但它似乎没有做任何事情。

在 Xcode 5 中运行分析器并将 CLANG_ANALYZER_OBJC_UNUSED_IVARS(未使用的 ivars)设置为 YES 永远不会产生警告。

0 投票
1 回答
2342 浏览

ios - 如何在不创建保留周期的情况下在块中设置 ivar

我正在尝试启动一个在块中NSObject调用的子类。应该是直到我将它设置在块中。我需要在这个块中设置它,因为在我显示后我将它保存在方法中FormObjectJavascriptCoreFormObjectnilJavascriptCoreUIActionSheetFormObjectUIActionSheetDelegate- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex

这是代码:

我知道问题是因为

如果我添加说明符,__weakXcode 会警告我将其更改为__block. 如果我将其更改为__blockthenformData仍将是nil之后。

如何正确设置此块中的 ivar?

解决方案

解决方案是使 ivar 成为一个属性并使用弱 self 来设置该属性。

0 投票
1 回答
192 浏览

macos - 属性访问的 EXC_BAD_ACCESS,(OS X 10.8.5)

我正在使用自动合成的@property. 当我在方法中访问该属性时,我遇到了一个EXC_BAD_ACCESS异常。以下是我的实现文件中的相关代码部分:

-startScanning:在方法的第一行抛出异常。深入堆栈跟踪,我看到异常是从CBCentralManager' 的实现内部抛出的:

0x7fff96c6ed49: leaq -413178944(%rip), %rax ; CBCentralManager._delegate

如果我闯入,-startScanning:我可以看到以下内容lldb

此外,如果我引用实例变量-startScanning:而不是属性,那么一切都会顺利进行。我在这里遗漏了一些明显的东西吗?

编辑:

对于它的价值,这在 OS X 10.9 上运行良好,但在 OS X 10.8.5 上运行良好。

0 投票
2 回答
438 浏览

objective-c - 将属性声明为受保护的更好方法

这篇博文之后,我看到了一种解决我面临的问题的方法。

我的问题和他一样,是我有一个类,它有一个必须在其子类中继承和访问的属性:

解决方案是这样的:

我想知道是否还有另一种方法可以将属性声明为受保护?

0 投票
1 回答
113 浏览

objective-c - 我想了解何时使用 @property 与实例变量

我已经学习 Obj-C 一段时间了,我有一个基本问题。在我的代码中似乎到处都有大量的“自我”。我认为这归结为一个关于声明和使用变量的两种方式之间差异的基本问题。

附件是一些支持我的问题的代码。在其中,声明了两个变量(在不同的地方)并用于在方法中执行相同的操作:optionA 和 optionB。我不确定使用哪一个。我认为这可能是因为使用“属性”,如 optionB 所示,可以确保我获得访问器(setter 和 getter),但我看到 optionA 显然有一个 setter。

我更喜欢 optionA,因为这意味着我不需要到处都是“自我”,但我想了解使用其中一个而不是另一个的含义。

在我正在处理的程序中,所有变量都被声明为属性(下面的选项B),但是在访问它们时我必须使用'self'。我想知道这是否正确,只是正确做事方式的产物,或者我是否完全不合时宜,应该使用另一种形式,例如 optionA 的形式。

何时/为什么有人会在接口的大括号之间声明一个变量(如 optionA)?

我搜索了回答的问题,但没有找到任何能完全告诉我我想在这里学习什么的东西。但我无法在其他问题或他们的答案中找到我正在寻找的信息。

我在这里有一张代码的图片(但显然我没有允许将其直接链接到此消息中的威望点):http: //i1127.photobucket.com/albums/l631/GenericImage/headerQueryOBJC。 jpg

以下是清单:

执行

0 投票
1 回答
95 浏览

ios - 名为“image”的属性没有可见的 ivar?

假设虚拟 VC 有一个私有属性“图像”

虚拟VC.h

虚拟VC.m

如果我尝试_image在其设置器中使用,编译器会告诉我我正在使用undeclared identifier.

但是,如果我将属性名称更改为image1or anotherImage_image1使用和没有问题_anotherImage

谁能解释为什么会这样?

0 投票
2 回答
44 浏览

ios - 如何正确地将变量值传递给另一个视图

我有两个视图MainViewMainInvoicing

MainView我向MainInvoicing发送一个 int 类型变量值

这是我的代码

MainInvoicing.h 文件中我声明了 int 类型 var

MainView.m文件中单击按钮,我将 MainInvoicing 称为

由此我的MainInvoicing被完美调用,但myChoice等于零“0”。虽然它应该是'1'

我在MainInvoicing.m中收到这个值

开始方法是

我总是在默认部分......。

我在哪里错了,或者有什么建议可以得到正确的价值……请帮忙……