@property、@sythesize以及Ivar和@dynamic讲解(下)
下面仅仅是一些基本知识,可能有些知识用的比较少,不过知道怎么使用或者了解这个知识,还是不错的,毕竟技多不压身嘛!读完这篇文章大约需要5-10分钟左右!!!
一、@property
1、在头文件中:
@property int count;
面对上面的一行代码
- (int)count;
-(void)setCount:(int)newCount;
通过@property int count ;这样定义完成之后,我们就可以使用这个属性啦,而且这个属性就会自动有setter和getter方法。
例如:
@property NSString *userName;
第一步生成_userName属性
第二步为_userName属性自动生成set/get方法啦!!!
>>>>>Problem @property 增强
问题1:使用property增强后,什么时候要重写getter/setter方法?
(1).使用property增强,只会生成最简单的getter/setter方法的声明和实现,并不会对传入的数据进行过滤。
(2).如果想对数据进行过滤,那么我们就必须重写getter/setter方法。
问题2:重写getter/setter方法有哪些注意点?
(1)如果重写了setter方法,那么property就只会生成getter方法
(2)如果重写了getter方法,那么property就只会生成setter方法
(3)如果同时重写了getter/setter方法,那么property就不会自动帮我们生成私有的成员变量(带_的成员变量)
二、@synthesize
#import <Foundation/Foundation.h>
#import "User.h" //有时候我们不想定义属性为_开头的
//这时候我们就可以使用@synthesize,来修改我们想要的属性名 //这时候属性_userName变成了$userName @implementation User
@synthesize userName = $userName; @end
因为我们使用@property定义属性之后,如果我们想修改这个属性的名称,我们可以使用@synthesize关键字来对名称进行修改。
>>>>>>注意点:
@synthesize age;代表:
(1).setter和getter实现中会访问@synthesize后同名成员变量age
(2).如果成员变量age不存在,就会自动生成一个@private的成员变量age
三、Ivar(成员变量)
Ivar可以理解为类中的一个变量,主要作用是用来保存数据的。@property可以说@property = Ivar + setter + getter
>>>>lvar 用的并不是特别多,大家用的时候也不会太在意这个
@dynamic和@synthesize的异同
a. 通过@synthesize 指令告诉编译器在编译期间产生getter/setter方法
b. 通过@dynamic指令,告诉编译器,属性的 setter 与 getter 方法由用户自己实现,不会自动生成,如果没有自动生成在运行时调用会crash
c. 有的存取是在运行时动态创建的,如在CoreData的NSManagedObject类使用的某些。如果你想这些情况下,声明和使用这些属性,但要避免缺少方法在编译时的警告,你可以使用@dynamic动态指令,而不是@synthesize合成指令
@property、@sythesize以及Ivar和@dynamic讲解(下)的更多相关文章
- Siki_Unity_2-1_API常用方法和类详细讲解(下)
Unity 2-1 API常用方法和类详细讲解(下) 任务101&102:射线检测 射线origin + direction:射线检测:射线是否碰撞到物体 (物体需要有碰撞器),碰撞物体的信息 ...
- 讲解下for循环的用法,加深记忆
引子 这是一段很简单的代码,但是即便是这么简单的东西,这里我们还是需要说一下. 关于for循环整个执行流程就是,先执行var i=10,然后到了第二个语句,判断10是否大于0,很明显为true,所以此 ...
- ? 原创: 铲子哥 搜狗测试 今天 shell编程的时候,往往不会把所有功能都写在一个脚本中,这样不太好维护,需要多个脚本文件协同工作。那么问题来了,在一个脚本中怎么调用其他的脚本呢?有三种方式,分别是fork、source和exec。 1. fork 即通过sh 脚本名进行执行脚本的方式。下面通过一个简单的例子来讲解下它的特性。 创建father.sh,内容如下: #!/bin/bas
? 原创: 铲子哥 搜狗测试 今天 shell编程的时候,往往不会把所有功能都写在一个脚本中,这样不太好维护,需要多个脚本文件协同工作.那么问题来了,在一个脚本中怎么调用其他的脚本呢?有三种方式,分别 ...
- webpack4基础入门操作(二)(讲解下webpack的配置内容)
前序:我之所以开始写这个系列,是因为我最近出去看了下外面的情况,发现技术更新的脚步太快了.我的技术栈已经完全落伍了. 所以准备今年学习写新的东西,而React.webPack4就是我的第一步.前面我看 ...
- 求通俗讲解下tensorflow的embedding_lookup接口的意思
https://www.zhihu.com/question/48107602 作者:王凯链接:https://www.zhihu.com/question/48107602/answer/15980 ...
- 品茗论道说广播(Broadcast内部机制讲解)(下)
下面我们来看,递送广播动作中最重要的processNextBroadcast(). 3.2 最重要的processNextBroadcast() 从processNextBroadcast()的代码, ...
- @property、@synthesize和dynamic的用法
原文: http://blog.csdn.net/hherima/article/details/8622948 @代表“Objective-C”的标志,证明您正在使用Objective-C语言 O ...
- linux下umask的使用讲解
最近开始学习linux ,看完马哥的linux课程关于umask的这个部分, 写这篇博客希望加深下我对umask的理解 和对umask不太清楚的博友一些帮助. 1 umask 是什么 当我们登录系统之 ...
- sencha touch 入门系列 (八)sencha touch类系统讲解(下)
接着上一讲,我们通过一组代码来讲解一下st的类的一些属性: Ext.define("MyConfig",{ config:{ website:"http://127.0. ...
随机推荐
- 用pyspider爬取并解析json字符串
获取堆糖网站所有用户的id 昵称及主页地址 #!/usr/bin/env python # -*- encoding: utf-8 -*- # Created on 2016-06-21 13:57: ...
- MySql在Mac上的安装配置
一.下载安装 官网下载社区版dmg安装文件: https://dev.mysql.com/downloads/mysql/ 1.执行安装文件,按步骤完成安装. 2.安装完成后终端输入: mysql - ...
- C# 自动程序 windows 无法启动 XXXX 服务 错误5 拒绝访问
遇到过两次 这样的问题了,所以记录一下 原因可能是服务所在文件的目录权限不够 解决方法: 1是查看服务对应的程序所在的目录 2是设置目录的安全权限 右击–属性–安全–添加相应的帐号,给予除完全控制外的 ...
- Windows平台最方便最易用的法语输入法
原文:http://wenwen.sogou.com/z/q1700007921.htm 对于XP,在“控制面板”中选择“输入法区域设置”,单击“更改”,出现一个“设置”框:选择“添加”,然后选择“法 ...
- Canal学习笔记(服务端)
canal服务端 canal服务端有两种运行模式,一种单机模式,一种HA运行模式(zk保证) 单机模式:同步的binlog节点信息保存在本地(/conf/{自定义分区文件夹}/),meta.dat H ...
- Javascript高级编程学习笔记(22)—— 对象继承
继承是所有面向对象的语言最让人津津乐道的概念 许多面向对象的语言都支持两种实现继承的方式: 1.接口继承 2.实现继承 由于ECMAScript中没有函数签名,所以自然也是不支持接口继承 所以JS中能 ...
- TextView文字描边实现
TextView文字描边实现 需求描述 文字显示在图片的上面,图片的内容是不确定了,为了防止文字与图片的颜色相近导致用户看不到或者看不清文字的问题,所以显示文字描边,避免问题. 实现 实现思想 使用T ...
- springboot tomcat配置参数列表
springboot tomcat的配置选项大全 server. Port = xxxx server. Address = server. contextPath = server. display ...
- [Swift]Xcode标记:MARK、TODO、FIXME
1. MARK MARK一定要大写.其又叫做代码标注,我们可以使用它来添加一些说明文字.同时可以选择其上方是否需要显示分割线. // MARK: - 说明文字,带分割线 // MARK: 说明文字,不 ...
- Spark基础-scala学习(四、函数式编程)
函数式编程 将函数赋值给变量 匿名函数 高阶函数 高级函数的类型推断 scala的常用高阶函数 闭包 sam转换 currying函数 return 将函数赋值给变量 scala中的函数是一等公民,可 ...