创建: 2018/01/24

完成: 2018/01/25

遗留: TODO

声明属性(declared property)

 属性的声明与功能
 属性的声明

@property 读写

@property(readonly) 只可读

● 多个用逗号连接

● 也可以自己声明

 属性的实现

用@property声明的变量可以用@synthesize

● 多个用逗号连接

● 如果不带@synthesize, 内部属性名字变成_名字

@interface Sample : NSObject
@property int sample;
@end @implementation Sample
//内部为名为int _sample;
@end

也可以在内部改名,  类内部用其他名称来使用

@synthesize value = runningAverage; //类内其他方法处该属性名字变为等号右边,外部不变

● 可读生成getter, 可读写生成getter, setter

● 必须已经声明了@property

 ● 如果不需要接入类方法(getter, setter), 可以用@dynamic

也可以不要

 @dynamic

相关的getter, setter由自己实现

不实现也不报错,但是调用时程序会崩溃

 属性的option

指定多个用,隔开

种类 opt  说明
 指定方法名

getter=信息选择器

setter=信息选择器

 改变系统默认的getter,setter名字
 读写属性  readonly  只读
 readwrite

读写(默认)

 值的设定方法

assign

unsafe_unretained(ARC用)

 代入(默认)

retain

strong(ARC用)

强参照, strong

 weak(ARC用)  弱参照
 copy  复制
 nonatomic

atomic

nonatomic

默认不指定,相当于atomic, 保护改属性不会被多线程同时操作

 不同@sythesize,自己来实现的话声明里最好加上nonatomic

     
     
     
     
     
     
 值设定方法的选项 

# TODO: Supply [property属性的值设定方法选项的详细 p169]

# TODO: Supply [多线程 p480]

 属性的继承

● 可以重载getter, setter

除了readonly可以变成readwrite以外,@property必须一样

● 子类不能用@sythesize来实现父类的声明属性

● 类型, 协议内部可以有声明属性但不能有@sythesize, 在实现部(@implementation)处自己实现

# TODO: Supply [类型, 协议内部可以有声明属性但不能有@sythesize]

 不能和方法族重合

用ARC时方法不能属于方法族

alloc方法族

copy方法族

mutableCopy方法族

new方法族

init方法族

   
  点运算符获取属性
 相当于发出信息 结论: 尽量不要用点运算符获取属性

sample.var; // 获取 相当于 [sample val]
sample.val = n; // 设定 相当于 [sample setVal: n]
sample.method; // 不带参数的方法呼出方法, 不要这么用

点运算符读取

sample.var;

读取

[sample val];

点运算符设定

sample.val = n;

设定

[sample setVal: n];

注意:

● 不能用在id类上

● 不能用在只有setter的上面

 

● 可以连续使用

n = obj.productionList.length;

● 可以连续代入

n = obj.count = obj.depth = ++n;

● 递减递减,复合代入运算符的解释

n = obj.length++;
//相当于
n = [obj setLength: [obj length] + ]; n *= obj.length;
//相当于
n = [obj setLength: [obj length] * n];

● 类内部呼出声明属性方法

self.count = ;

super.depth = maxDepth;

● 和构造体的点运算符混用

属性是构造体的时候

struct Sample a = ...; //构造体
obj.b = a; obj.b.length = ;
//相当于
[obj b].length = ;
 获取属性的方针

 ● 构造函数里面直接获取属性

 ● 内部函数的话,最好都用声明属性的方法,也可以直接获取。最好固定一种

   
   
   
   
   
   
   

Objective-C 声明属性的更多相关文章

  1. Objective - C中属性和点语法的使用

    一.属性        属性是Objective—C 2.0定义的语法,为实例变量提供了setter.getter方法的默认实现能在一定程度上简化程序代码,并且增强实例变量的访问安全性         ...

  2. ARC声明属性关键字详解(strong,weak,unsafe_unretained,copy)

    ARC声明属性关键字详解(strong,weak,unsafe_unretained,copy) 在iOS开发过程中,属性的定义往往与retain, assign, copy有关,我想大家都很熟悉了, ...

  3. iOS 声明属性关键字的总结

    atomic: 原子操作(原子性是指事务的一个完整操作,操作成功就提交,反之就回滚. 原子操作就是指具有原子性的操作)在objective-c 属性设置里面 默认的就是atomic ,意思就是 set ...

  4. iOS 声明属性关键字讲解

    atomic: 原子操作(原子性是指事务的一个完整操作,操作成功就提交,反之就回滚. 原子操作就是指具有原子性的操作)在objective-c 属性设置里面 默认的就是atomic ,意思就是 set ...

  5. swift声明属性为某个类型同时遵循某协议

    swift声明属性为某个类型同时遵循某协议 var instanse:(协议A & 类B)

  6. mybatis进行mapper.xml测试的时候发生"必须为元素类型 “mapper” 声明属性 “namespace”

    1.Caused by Caused by: org.xml.sax.SAXParseException; lineNumber: 7; columnNumber: 45; 必须为元素类型 " ...

  7. React Native声明属性和属性确认

    属性声明 因为用React Native创建的自定义组件可以复用, 我们开发过程中可能一个项目组有多个人同时开发,其他同事可能会用到我们自定义的组件, 但是他们使用的时候很容易忘记使用某些属性,这时候 ...

  8. php 魔术方法,未声明属性,数组的注释 - 帮助ide跳转,提高可读性

    本人使用vscode编辑器.其他编辑器未测试. 经过1: 用laravel开发了一段时间,最麻烦的一点就是许多时候编辑器无法智能提示和辅助跳转. 有一款ide-helper的插件,感觉不是很好用,经常 ...

  9. mybatis-generator XML Parser Error on line 38: 必须为元素类型 "table" 声明属性 "enableInsertByPrimaryKey"。

    1. 解决方法 在 table 元素中删除属性 enableInsertByPrimaryKey 即可.就是这么神奇... 2. 情景重现 使用 mybatis-generator 插件生成代码时报错 ...

随机推荐

  1. nativeLibraryDirectories=[/data/app/com.lukouapp-1/lib/arm64, /vendor/lib64, /system/lib64]]] couldn't find "libxxxx.so

    一开始我遇到的问题是,如果手机有SD卡槽,则不管有没有插卡,都会闪退,打日记后发现是找不到so文件.报错日记如下: nativeLibraryDirectories=[/data/app/com.lu ...

  2. CodeForces 221D Little Elephant and Array

    Little Elephant and Array Time Limit: 4000ms Memory Limit: 262144KB This problem will be judged on C ...

  3. windows PHP配置随笔

    这几天配置本地windows wnmp(windows + nginx + mysql + php 5.3)遇到了不少问题.决定以后随笔记下解决的问题. #php.ini 配置含路径的值时,要注意把使 ...

  4. [bzoj2733][HNOI2012]永无乡_权值线段树_线段树合并

    永无乡 bzoj-2733 HNOI-2012 题目大意:题目链接. 注释:略. 想法: 它的查询操作非常友善,就是一个联通块内的$k$小值. 故此我们可以考虑每个联通块建一棵权值线段树. 这样的话每 ...

  5. cogs——1215. [Tyvj Aug11] 冗余电网

    1215. [Tyvj Aug11] 冗余电网 ★   输入文件:ugrid.in   输出文件:ugrid.out   简单对比 时间限制:1 s   内存限制:128 MB TYVJ八月月赛提高组 ...

  6. IDUtil 永不重复的ID

    package com.xxx.common.util; import java.util.Random; /** * 各种id生成策略 * * @version 1.0 */ public clas ...

  7. 【SQL Server 学习系列】-- 随机生成日期时间的SQL脚本

    DECLARE @dt1 DATETIME,@dt2 DATETIME,@a BIGINT,@b BIGINT SET @dt1='2010-01-01'--开始日期 SET @dt2='2010-0 ...

  8. 根据身份证号,取得行政区划的Javascript实现

    原文:http://www.cnblogs.com/baibaluo/archive/2011/06/03/2071255.html#2585076 项目里需要一个根据身份证号,取得发证地行政区划的的 ...

  9. Installation error: INSTALL_FAILED_VERSION_DOWNGRADE Android

    我们在安装新的 APk 的时候.会出现 Installation error: INSTALL_FAILED_VERSION_DOWNGRADE 原因:  是由于 androidversionCode ...

  10. mac中apache+mysql+php+phpMyAdmin配置备忘

    Mac OS X 内置Apache 和 PHP,使用起来非常方便.本文以Mac OS X 10.6.3和为例.主要内容包括: 启动Apache 运行PHP 安装MySQL 使用phpMyAdmin 配 ...