iOS基础知识1
来源:互联网 发布:费米估算法怎么用? 编辑:程序博客网 时间:2024/06/04 22:09
一、@property中有哪些属性关键字?
1、strong:释放旧对象将旧对象的值赋予输入对象,再提高输入对象的索引计数为1,此关键字经常使用。
2、weak:不增加引用计数,不持有对象,因此也不能决定对象释放,对比assign的一个好处是,当对象消失时指针自动归为nil。
3、assign:适用于基础数据类型(NSInteger、CGFloat、...)不增加引用计数。
4、copy:建立一个索引计数为1 的对象然后释放旧对象,此属性只对那些实行了NSCopying协议的对象类型有效(NSString、Block)。
5、atomic和 nonatomic用来决定编译器生成的getter和setter是否为原子操作,atomic设置成员变量的@property属性时默认为是atomic 提供线程安全。
6、nonatomic:非原子性访问对于属性赋值的时候不加锁,多线程并发访问会提高性能,如果不加此属性则默认是两个访问方法都为原子型事务访问。
7、readonly:此标记说明属性是只读的。
8、readwrite:此标记说明属性会被当成读写的,这也是默认的。
9、unsafe_unretained:跟weak类似,声明一个弱引用,但是当引用计数为0时,变量不会自动设置为 nil(ios5加入的)。
二、weak属性需要在dealloc中置nil么?
不需要,在ARC环境无论是强指针还是弱指针都无需在dealloc设置为 nil , ARC会自动帮我们处理。
三、@synthesize和@dynamic分别有什么作用?
@synthesize:编译器期间,让编译器自动生成getter和setter方法。当有自定义的存或取方法时,自定义的存或取方法会屏蔽@synthesize生成的getter和setter方法。@synthesize variable = _variable;这个是给属性变量variable绑定一个实例变量_variable。
@dynamic:告诉编译器,不自动生成getter和setter方法,避免编译期间产生警告,然后由自己实现存取方法或者在运行时动态创建绑定。主要使用在CoreData实现NSManagedObject子类时使用,由CoreData框架在程序运行时动态生成子类属性。
四、ARC下,不显式指定任何属性关键字时,默认的关键字都有哪些?
在编写代码时,@property什么都不写的话,会怎么样呢!大家有没有想过?
@property NSString *name;
我没有写任何属性关键字,其实这样也会有默认的属性关键字。@property (strong, atomic, readwrite) NSString *name;
因为父类指针可以指向子类对象,使用copy的目的是为了让本对象的属性不受外界影响,使用copy无论给我传入是一个可变对象还是不可对象,我本身持有的就是一个不可变的副本。
如果我们使用是strong,那么这个属性就有可能指向一个可变对象,如果这个可变对象在外部被修改了,那么会影响该属性。
1、如果指定了成员变量的名称,会生成一个指定名称的成员变量。
2、如果这个成员变量已经存在了就不再生成了。
3、如果是@synthesize foo;会生成一个名称为foo的成员变量,也就是说:如果没有指定成员变量的名称会自动生成一个属性变量同名的成员变量。
4、如果 @synthesize foo = _foo;不会生成成员变量(实例变量)。
假如property名为foo,存在一个名为 _foo的实例变量,那么不会自动合成新变量了。
- IOS 多线程(1) --基础知识
- ios基础知识整理1
- iOS基础知识1
- IOS基础知识梳理(1)
- iOS 简单的基础知识(1)
- iOS 基础知识
- iOS基础知识
- IOS基础知识
- ios基础知识
- ios基础知识
- IOS基础知识
- ios基础知识
- IOS基础知识
- iOS 基础知识
- IOS-基础知识
- ios基础知识
- iOS基础知识
- iOS基础知识
- 网站字体的选择
- python基础语法学习记录之数据结构和算法(2)
- ServletJSP:上
- 538. Convert BST to Greater Tree
- Codeforces Round #430 (Div. 2)(A+B+C)
- iOS基础知识1
- 查验身份证(PAT-1031)
- kali升级之后theharvester不能使用
- python机器学习-异常数据分析
- innerText与innerHTML用法区别
- Java中的反射
- 使用requests模拟登陆csdn
- DataIntegrityViolationException
- 手持端手机端移动端车牌识别介绍