Objective-C(四、属性声明与功能,点语法)——iOS开发基础
来源:互联网 发布:乐高编程软件手机 编辑:程序博客网 时间:2024/06/06 07:12
结合之前的学习笔记以及参考《Objective-C编程全解(第三版)》,对Objective-C知识点进行梳理总结。知识点一直在变,只是作为参考,以苹果官方文档为准~
四、属性声明与功能
1、点语法
a、本质:方法调用(不是访问成员变量)
b、原理:是一种编译器行为,使用时,编译器会自动进行转换,来判断调用set方法还是get方法
obj.name = val;
[obj setName:val];
getter val = obj.name;
val = [obj name];
c、使用注意:
(1)必须已定义set和get方法才能使用点语法(属性可读写或可读,不能只写)
(2)不能对id类型的变量应用点语法,编译器无法判断是否存在属性对应的访问方法
(3)避免死循环(例如在set方法中用self调用自身等等)
(4)复杂点操作解释如下: e = obj.depth++;
右侧相当于连续调用了getter和setter方法,相当于执行了 [obj setDepth:[obj depth]+1];
最后赋值给e的是递增操作前的depth值。
2、属性声明与实现(@property和@synthesize)
—->Xcode 4.4之前:
@property用在@interface中,自动生成set和get方法的声明;
@property int age; //等同于下列声明- (void)setAge:(int) age;- (int)age;
@synthesize用在@implementation中,自动生成set和get方法的实现;
@synthesize age = _age; //等同于上述方法的实现
苹果官方推荐的是“_”开头的成员变量命名
因此编译器默认去访问_age,如果不存在,编译器会自动生成@private的成员变量_age
—->Xcode 4.4之后新特征:@property可自动生成set和get方法的声明和实现,包含了@synthesize的功能
注意:若手动实现了setter/getter方法,则编译器只会生成getter/setter方法;
若都实现了,编译器不会生成不存在的成员变量
3、实例变量的作用域(可见性)
说明:
(1)在@interface中,未声明属性的成员变量默认为@protected;
(2)在@implementation中也可以声明成员变量,但默认为@private,即使设成@public也没用(最好不要这么做);
(3)@interface中和@implementation中声明的成员变量不可同名。
(4)@package,在同一框架中,可以跟@public一样访问,而在框架外则同@private一样。
4、属性指定选项
a、@property与内存管理有关的参数MRC
assign(默认):直接复制,适用于非OC对象类型
retain:自动生成带内存管理的release旧值,retain新值的set方法(具体实现方法在后面整理内存管理的时候会提到)
copy:自动生成带内存管理的set方法,release旧值,copy新值,会创建新的实现对象,原对象引用计数器不变,新对象引用计数器为1
b、控制是否生成set方法
readwrite(默认):同时生成set方法和get方法的声明和实现
readonly:仅生成get方法的声明和实现
c、控制set方法的多线程管理
atomic(默认):自动不过生成set方法时多线程加锁(互斥锁),性能低,耗性能
nonatomic:禁止多线程加锁,性能好,//如无特殊需求使用此参数
d、指定方法名
setter = setter方法名:注意setter名称后面要加冒号:
getter = getter方法名
例如:
@property (setter = setValue:) int age;
此情况下运用点语法调用 .age 时,实际上启用的方法是setValue:
5、在ARC条件下参数的修改
strong:成员变量为强指针,相当于MRC中的retain,适用于OC对象类型
weak:成员变量为弱指针,弱引用,相当于MRC中的assign,适用于OC对象类型
unsafe_unretained:同assign(MRC)一样
上述内容已经涉及内存管理,在之后的知识点总结中会将内存管理作为一个篇章总结~
- Objective-C(四、属性声明与功能,点语法)——iOS开发基础
- IOS开发基础Object-C(03)—点语法
- 【IOS 开发学习总结-OC-12】★objective-c面向对象之——合成存取方法与点语法
- Objective-C开发——最简单的Objective-C程序与基础语法解析
- 黑马程序员-iOS基础-Objective-C基础(四)OC开发技巧及核心语法(上)
- Objective-C(一、文件扩展名,驼峰标识法,#import与#include,OC弱语法)——iOS开发基础
- 黑马程序员——ios基础---Objective-C:基础语法
- ArcGIS Runtime SDK for iOS开发系列教程(3)——Objective-C语法基础
- 从Android到iOS开发——(1)、objective-c与java语法对比
- IOS开发——Objective-C语法快速参考
- iOS开发学习第二十一课——属性 / 点语法
- IOS开发开篇之Objective-C语法基础
- iOS开发开篇之Objective-C语法基础
- iOS开发核心语言Objective C —— 面向对象思维、setter和getter方法及点语法
- Objective-C基础——核心语法-点语法法和成员变量的作用域
- objective-c语法学习:@property属性和点语法
- Objective-C基础——语法总结
- Objective-C(十三、字典类)——iOS开发基础
- 两款天气预报APP产品分析
- Android开发之旅:;HelloWorld项目的目录结构; android架构
- js实现跨浏览器好友列表
- Android数据存储和访问
- 使用node.js ,Express, 和Mongodb 简历一个简单的Restful 网页服务-part1
- Objective-C(四、属性声明与功能,点语法)——iOS开发基础
- Linux ls 命令
- lua5.3 和 vs2010 环境搭建
- CentOS 6.6编译安装LAMP(Apache2+PHP+Mysql+PHPmyAdmin)
- nginx方面的书籍
- 解决C++与object-c混合编译
- Xcode_真机调试证书生成、设置、应用
- window的代码源文件放到mac上注意事项
- 日语学习之沪江N3基础 20150626 -2