copy
建立一个索引计数为1的对象,然后释放旧对象,在赋值时使用传入值的一份拷贝。拷贝工作由copy方法执行,此属性只对那些实行了NSCopying协议的对象类型有效。更深入的讨论,请参考“复制”部分。如果属性类型没有实行NSCopying协议,程序运行时会报如下错误(testB是属性的类型):
-[testB copyWithZone:]: unrecognized selector sent to instance
retain
释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1
对其他NSObject和其子类
对参数进行release旧值,再retain新值
指定retain会在赋值时唤醒传入值的retain消息。此属性只能用于Objective-C对象类型,而不能用于Core Foundation对象。(原因很明显,retain会增加对象的引用计数,而基本数据类型或者Core Foundation对象都没有引用计数——译者注)。
注意: 把对象添加到数组中时,引用计数将增加对象的引用次数+1。
assign
简单赋值,不更改索引计数
对基础数据类型 (例如NSInteger,CGFloat)和C数据类型(int, float, double, char, 等) 适用简单数据类型
此标记说明设置器直接进行赋值,这也是默认值。在使用垃圾收集的应用程序中,如果你要一个属性使用assign,且这个类符合NSCopying协 议,你就要明确指出这个标记,而不是简单地使用默认值,否则的话,你将得到一个编译警告。这再次向编译器说明你确实需要赋值,即使它是 可拷贝的。
readonly
此标记说明属性是只读的,默认的标记是读写,如果你指定了只读,在@implementation中只需要一个读取器。或者如果你使用@synthesize关键字,也是有读取器方法被解析。而且如果你试图使用点操作符为属性赋值,你将得到一个编译错误。
readonly,readwrite和匿名类别结合起来可以实现在类外只读,在类内可读写的属性。
readwrite
此标记说明属性会被当成读写的,这也是默认属性。设置器和读取器都需要在@implementation中实现。如果使用@synthesize关键字,读取器和设置器都会被解析。
nonatomic
非原子性访问,对属性赋值的时候不加锁,多线程并发访问会提高性能。如果不加此属性,则默认是两个访问方法都为原子型事务访问。
使用assign: 对基础数据类型 (NSInteger)和C数据类型(int, float, double, char,等)
使用copy: 对NSString 。这种情况是针对于当把NSMutableString赋值给NSString的时候,才会有不同,如果是赋值是NSString对象,那么使用copy还是strong,结果都是一样的,因为NSString对象根本就不能改变自身的值,他是不可变的。
使用retain: 对其他NSObject和其子类
weak
weak比assign多了一个功能,当对象消失后自动把指针变成nil,好处不言而喻。
相关推荐
iOS 中的修饰符是指在声明属性时使用的关键字,以确定属性的特性和行为。在 iOS 开发中,理解这些修饰符的区别非常重要,以便正确地使用它们来确保程序的正确性和安全性。 1. atomic 修饰符 atomic 修饰符是 iOS ...
修饰符是附加在视图上的函数或属性,它们改变了视图的外观、行为或与其他视图的交互方式。例如,`padding()`修饰符用于增加视图周围的内边距,`foregroundColor()`用于改变文本颜色。 二、位置和布局修饰符 在Swift...
`readwrite`则是默认的属性修饰,包含getter和setter方法,允许外部读写属性。 举例来说: ```objc @interface MyClass : NSObject @property (nonatomic, strong) NSString *name; @property (nonatomic, weak) ...
在iOS开发中,对象属性是Objective-C编程中的关键概念,它们定义了类...理解这些属性修饰符对于编写高效、健壮的iOS应用程序至关重要。正确使用它们可以避免内存泄漏、循环引用等问题,同时确保代码的稳定性和性能。
这里我们将深入探讨复杂数据类型变量的引用计数、Block以及`__block`修饰符之间的关系。 首先,了解引用计数是理解整个话题的基础。在Objective-C中,每个对象都有一个引用计数,表示有多少个指针指向它。当对象的...
在Objective-C中,修饰符(如copy、mutableCopy、strong、weak、assign)用于声明变量时的内存管理策略和属性的特性。例如,copy修饰符在复制不可变对象时只进行浅拷贝,它不会开辟新的内存空间,而是使新的指针指向...
#### 四、属性修饰符的作用 - **readwrite**: 默认属性,表示生成getter和setter方法。 - **readonly**: 只生成getter方法,不允许外部修改该属性。 - **assign**: 指定使用赋值操作符来处理属性,适用于基本数据...
#### 二、属性修饰符的作用及区别 - **readwrite、readonly:** - `readwrite`:默认属性,表示属性既可以通过getter获取也可以通过setter修改。 - `readonly`:只允许通过getter获取属性值,不允许通过setter...
在ARC中,可以使用`__strong`、`__weak`、`__unsafe_unretained`和`__autoreleasing`这四种修饰符来指定变量的引用计数行为。其中,`__unsafe_unretained`与`__strong`类似,但不处理对象的释放,可能导致野指针问题...
- **封装**:通过属性和访问修饰符保护内部状态。 - **协议**:定义一组方法签名,可以被任何遵循该协议的类实现。 #### 五、Objective-C中的动态特性 - **动态消息传递**:Objective-C使用动态消息传递机制,即在...
对于SwiftUI,开发者可以使用`.animation`修饰符结合`.onAppear`或`.onDisappear`等生命周期方法来实现动画效果。 最后,优化是任何动画都不可忽视的一环。性能考虑包括限制同时运行的动画数量,避免大量视图的实时...
在SwiftUI中,我们可以直接通过修改视图的绑定值来触发动画,例如`.animation()`修饰符就能轻松添加动画效果。 总的来说,iOS中的动画效果丰富多样,可以通过Core Animation、UIKit Dynamics、自定义转场动画以及...
在Objective-C中,不加任何访问修饰符的方法默认为公开,而在Swift中,使用`public`关键字声明。 4. **MVC设计模式**: Model-View-Controller(MVC)是一种常见的软件设计模式,用于分离业务逻辑、数据模型和用户...
标题和描述中提到的`strong`、`weak`和`unsafe_unretained`是ARC下的三个关键修饰符,用于指定对象的引用计数如何变化。 1. **strong**:类似于旧版的`retain`,当一个对象被`strong`属性引用时,其引用计数会增加...
在iOS 15中,更多的修饰符被引入,如`task`用于异步操作,`onAppear`和`onDisappear`用于监听视图的出现和消失。 6. **Dynamic Content**: SwiftUI支持动态内容,可以根据数据源自动更新界面。比如,`List`和`...
在类的定义中,实例变量通常以 `@public`、`@private` 等访问控制修饰符进行声明,方法则以 `-` 或 `+` 来区分实例方法和类方法。 创建和使用对象是程序的核心部分。通过 `alloc` 和 `init` 方法或 `new` 关键字...
2. **实现协议方法**:遵循协议的类需要实现协议中声明的所有方法,除非这些方法标记为可选(Objective-C中使用`@optional`,Swift中默认所有方法都是可选的,但可以使用`required`修饰符使其变为必需)。...
5. **SwiftUI**:在SwiftUI中,我们可以通过`.font`修饰符来改变字体的样式,`.bold()`表示加粗。例如: ```swift Text("加粗文字") .font(.system(size: 24, weight: .bold)) ``` 这里创建了一个24点的加粗系统...
1. **声明遵循NSCopying或NSMutableCopying协议**:要在自定义类中使用`copy`修饰符,首先需要声明类遵循`NSCopying`或`NSMutableCopying`协议。 2. **实现NSCopying协议**:实现协议中的`-(id)copyWithZone:(NSZone...