我的理解是,设置ivar现在保留了分配给它的对象,因为设置变量默认为strong限定符.由于ivar在其声明的对象的范围内,并且strong保留变量范围内的对象,这意味着在包含ivar的对象仍处于活动状态时,永远不会释放ivar值.

对吗?

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

推荐答案

如果是变量:

  1. 在类中使用ARC声明.
  2. 仅用于类实现(不作为类接口的一部分公开).
  3. 不需要任何KVO.
  4. 不需要任何自定义的getter/setter.

然后,可以将其声明为ivar,而不使用相应的@property/@synthesize,并在实现中直接引用它.在类实现文件中声明这个ivar与Encapsulation是内联的.

// MyClass.h
@interface MyClass : ParentClass
@end

// MyClass.m
@implementation MyClass {
    NSString *myString;
}

- (void)myMethod {
    myString = @"I'm setting my ivar directly";
}
@end
  • ARC编译器将此ivar视为__strong.
  • 如果它是一个对象,它将被初始化为nil;如果它是一个原语,它将被初始化为0.

Objective-c相关问答推荐

Clang:将 id 之类的类型转换警告提升为 class

在 MacOS 上截屏

如何从 C 方法调用 Objective-C 方法?

如何获取目标名称?

如何将 CGPoint 添加到 NSMutableArray?

NSTimeZone:localTimeZone 和 systemTimeZone 有什么区别?

NSMutableDictionary 线程安全

将子视图添加到 UIButton

更改 UIBarButtonItem 的 Tint colored颜色

iOS NSLayoutConstraint 使用 constraintWithItem 固定宽度

iPhone - 什么是重用标识符(UITableViewCell)?

自定义导航栏样式 - iOS

以编程方式查找 iphone 的语言环境货币

嵌入自定义容器视图控制器时,内容位于导航栏下方.

BOOL到 NSString

从视图中删除所有子图层

使 UILabel 的文本加粗

如何检测父视图控制器中模态视图控制器的解除?

未调用 cellForItemAtIndexPath 但 numberOfItemsInSection 调用

CALayer:仅在一侧添加边框