问题标签 [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 投票
1 回答
2378 浏览

objective-c - Objective-c 中枚举类型的 ivars 的默认值

我有一个enum这样的:

我有一个在接口中声明的 ivar 类,如下所示:

目前 myTypeIvar 的默认值为 ThingA(因为 ThingA 在枚举中的第 0 位)。 使 myTypeIvar ThingB 的默认值的最佳方法是什么?

一种解决方案是简单地重新排序枚举定义(将 ThingB 放在第 0 位)。另一种解决方案是在init方法中设置 myTypeIvar。但是 init 方法不存在(并且当它被添加时它永远不会被调用)。

0 投票
4 回答
718 浏览

objective-c - Objective-C:Xcode 自动识别 ' = _property ":这是 @synthesize 创建的变量名吗?

当您声明 a@property@synthesizeit 时,最好使用:

我注意到 Xcode 会_myProperty为您自动完成 ivar 名称,即使它尚未在源代码中使用。

这是因为 ivar@synthesize会自动创建默认名称_myProperty吗?还是仅仅因为 Xcode 支持这种带有自动补全功能的通用约定?

谢谢。

编辑:我不是在寻找为什么这是一种好习惯的原因;我已经知道这些并且已经使用了这个约定一段时间了。我想了解内部结构,因此询问这是否是满足约定的硬编码自动完成规则,或者它是否是标准自动完成,实际上 Objective-C 规范规定生成的 ivar@synthesize必须具有form _myProperty,因此在 ivar 的幕后生成之后,自动完成就知道它的存在。谢谢!

0 投票
2 回答
382 浏览

ruby-on-rails - Rails 视图 ivars 在 ruby​​ 1.9 中自发燃烧

我有一个 Rails 3 / ruby​​ 1.9.2 webapp。每隔一段时间 - 它可能只是 100000 中的 1 个请求 - 我收到一个我无法解释的错误报告。

确切的错误各不相同,但它们似乎与我认为实例变量突然变为 nil 一样。最近发生了最明显的例子,其中这个代码在一个助手中 -

- 引发“NoMethodError:nil:NilClass 的未定义方法‘+’”。但是,请注意,错误不仅限于这种情况,这两行代码仅用于说明,而不是可以解决“解决”问题的方法。

该错误基本上是不可能重现的:我自己从未见过它,只看到了由此产生的错误报告。我相信当我们从 REE 切换到 ruby​​ 1.9.2 时,该错误首次出现。

可能相关或不相关的其他细节:

  • 我们在 Solaris 10 上运行 ruby​​1.9.2p290,使用 unicorn 分叉实例
  • 我们没有使用线程或纤维(更正:我们的应用程序本身没有,但我们确实使用了 NewRelic,它有一个用于收集/发布统计数据的后台线程。)
  • 我们混合了 .haml 和 .erb 视图,但我只见过这种情况发生在 .haml 中。(不过,我们没有很多 .erb)
  • 我从未在控制器代码中看到过这种情况
  • 当我知道我们从不调用 Bar.foomethod 的事实时,我偶尔会看到有关“Bar 的未定义方法 'foomethod'”的错误。这可能与上述错误有关,其中 Bar 对象自发地替换了 Foo ivar。

我很难追踪这个。有什么建议,或者有没有人看到任何听起来相似的东西?

0 投票
2 回答
9103 浏览

objective-c - ARC时代的财产与ivar

据我了解,现在设置 ivar 会保留分配给它的对象,因为设置变量默认为strong限定符。因为 ivars 在声明它们的strong对象的范围内,并在变量范围内保留对象,这意味着当包含 ivar 的对象仍然存在时,永远不会释放 ivars 值。

它是否正确?

如果是这样,我是否认为在内存管理方面,保留(强)属性和简单的 ivar 之间没有区别了?

0 投票
1 回答
200 浏览

objective-c - 在父对象被释放后延迟释放 ivar

我有一个类 TouchInfo,它有一个类 MotionStreak 的 ivar。

此类基本上处理触摸事件并绘制跟随触摸的运动条纹。我想TouchInfo在用户释放他/她的手指时释放与特定触摸关联的实例,但我希望运动条纹在淡出之前保持 0.5 到 1.0 秒,所以我不能在类的方法中释放streakivar .deallocTouchInfo

我正在使用定时器来延迟streakivar 的发布,使用自定义定时器类如下:

到目前为止,它没有任何崩溃。但我想知道我是否做错了,是否有更好和推荐的方法。请指教。

p/s:请不要对 ARC 提出建议;我还没有自动发布手动引用计数魔法:P

0 投票
1 回答
189 浏览

objective-c - Objective-C 中神秘的 NSDictionary 发布?

我正在为 Quartz Composer 进行自定义补丁的最后润色。截至目前,我几乎已经从补丁中删除了所有内容,当我尝试 NSLog 一个 ivar 的 NSDictionary 值时,它告诉我 BAD ACCESS 崩溃了,并且在我分配它时在最后一次执行中完美运行。

我的代码如下所示:

我可以看到日志显示所有三个 NSLog 行都可以正常工作,直到 self.inputBoutData 输入。然后,我看到 self.inputBoutData 已成功复制到循环的最后 NSLog 行中的 lastBoutData 。

在下一次执行 execute:atTime:withArguments: 时,self.inputBoutData 仍然是满的,但 lastBoutData 又是空白!!!我看不出这怎么会发生。然后,它像上一个一样再运行一个循环,并成功地将 self.inputBoutData 复制到 lastBoutData,并再次记录。下一次,我在第二个 NSLog 语句之前得到了 BAD ACCESS。

我收到一些错误消息,告诉我 lastBoutData 不是 NSDictionary,所以出于绝望,我添加了一个 [lastBoutData 保留],它不会崩溃。我没有发布这个 ivar,所以我不确定我为什么要保留它。我在许多其他补丁中与其他 ivars 做非常相似的事情,没有任何问题。我会错过什么?为什么这件事会在我身上释放,或者这就是正在发生的事情?

0 投票
1 回答
100 浏览

iphone - 为 UIImageView 子类的实例变量赋予默认值

我创建了一个 UIImageView 子类。我有 .h 和 .m 文件。我的 UIImageView 子类中有一个属性。我在 UIViewController 中拖了一个 UIImageView。现在,我想给属性一个默认值。例如,我有一个枚举,根据该枚举值,我想设置我的 imageView 的图像。如何给出这个值,当我不调用 init 方法时,我直接从 xib 加载它。我坚持这一点。花了很多时间,但无法解决。

0 投票
1 回答
338 浏览

objective-c - ivar 包含什么?

在头文件中,ivar 结构具有三个成员:-

名称、类型和偏移量。

我猜名称是用于存储变量的名称。

偏移量用于存储距离结构开头的字节数。

请告诉我我对这两个是否正确?谁能解释我什么是类型?是数据类型还是范围,说明它是公共的、私有的还是受保护的。

0 投票
1 回答
215 浏览

objective-c - 为什么这个 UIView 在某些情况下不被添加为子视图,但在其他情况下呢?

我有一个 UIView viewForRootVc,它是 UIView 子类的声明属性NewView。初始化是NewView的责任viewForRootVc,但随后子类NewViewSubClass设置其背景颜色。完成这一切后,根视图控制器RootVcviewForRootVc作为子视图添加到其视图中。

但这不起作用。viewForRootVc实际上并没有被添加。

但是,如果我执行以下三件事中的任何一项(请记住我使用的是 ARC),它确实有效:

  1. 我没有设置viewForRootVcin的背景颜色,而是将其设置为。然后,我不初始化 的实例,而是简单地初始化 的实例。NewViewSubClassNewViewNewViewSubClassNewView
  2. 在初始化viewForRootVcNewView,我调用setter(即self.viewForRootVc),而不是仅仅使用直接赋值。
  3. viewForRootVc在头文件中作为 ivar列出NewView

我不明白为什么这三件事都是必要的。

这是不起作用的代码:RootVc.m

新视图.h

新视图.m

新视图子类.m

我注意到的一件事是,如果我指定为viewForRootVcivar,我不需要放入.@synthesize viewForRootVc;NewViewSubClass

我一直理解声明的属性可以有效地实现以下目标:

  1. 允许其他对象访问它们。
  2. 允许在需要时调用 setter。
  3. 如果不使用 ARC,如果您retain在属性声明中指定,调用 setter 将自动保留该属性。
  4. 在 ARC 下,任何声明的属性都会自动生成一个 ivar。

但显然,它的意义远不止于此。我不确定这是否是范围问题,或者我上面的非工作代码是否最终创建了两个不同的版本——也许一个具有's方法viewForRootVc中指定的正确框架,另一个具有正确的背景颜色在's方法中指定,但两者都没有正确的框架和颜色。NewViewinitNewViewSubClassinit

我非常希望有人可以一劳永逸地为我澄清声明的属性与 ivars 的含义,以及调用 setter 来设置声明的属性与直接为其赋值。

0 投票
2 回答
765 浏览

objective-c - Objective-C:为他们制作 iVars @public 或 @synthesizing @properties?我什么时候应该使用属性?

我的类中有一些实例变量,我希望在任何地方都可以访问它们。像这样:

我可以使用如下语法从实例访问属性->,就像我在 C++ 中所做的那样:

someString当我想要的只是让外界可以访问它时,我应该建造一个财产吗?我将在我的界面中创建一个@propertyfor并在我的实现中创建它,这将使我能够使用点语法访问它。someString@synthesize