文档章节

第04天OC语言(04):property增强

lyh2017iOS
 lyh2017iOS
发布于 2017/07/14 09:23
字数 1373
阅读 1
收藏 0
  • 不要等到明天,明天太遥远,今天就行动。

#####须读:看完该文章你能做什么?

你能知道property内部做了什么事情 1> 生成setter方法、getter方法 2> 在内部生成一个私有的变量(_成员变量) 3> 和@synthesize age有区别 ,@synthesize age;直接赋值给age

#####学习前:你必须会什么?

了解什么是封装。


#####一、本章笔记

 一、
     从Xcode4.4以后 Apple 对 @property进行一个增强,以后只要利用一个 @property 就可以同时生成 setter 、 getter 方法的声明 和实现
     没有告诉 @property 要将传入的参数赋值给谁,默认 @property 会将传入的属性 赋值给 _开头的成员变量
     
     @property 有一个弊端: 他只会生成 最简单的getter\setter方法的声明和实现,并不会对传入的数据进行过滤
     如果想对传入的数据进行过滤,那么我们就必须重写 setter\getter方法
     如果不想对传入的数据进行过滤,仅仅是提供一个方法给外界操作变量,那么就可以使用
     
     如果利用 @property来生成 getter/setter方法,那么我们可以不写成员变量,系统会自动给我们生成一个 _开头的成员变量
     注意: @property 自动带我们生成的成员变量 是 一个私有的成员变量, 也就是说是.m文件中生成的,而不是在.h文件中生成的
 二、
     如果重写了setter方法,那么property就只会生成getter方法
     如果重写了getter方法,那么property就只会生成setter方法
     如果同时 重写了getter/setter方法,那么@property就不会自动 带我们生成私有的成员变量
 三、注意:
     系统 和 @synthesize 有点区别
     系统直接赋值给 _age
     而使用 @synthesize age; 系统 则会赋值给 age;

#####二、code ######main.m

#pragma mark 04-property增强
#pragma mark 概念
/*
 一、
     从Xcode4.4以后 Apple 对 @property进行一个增强,以后只要利用一个 @property 就可以同时生成 setter 、 getter 方法的声明 和实现
     没有告诉 @property 要将传入的参数赋值给谁,默认 @property 会将传入的属性 赋值给 _开头的成员变量
     
     @property 有一个弊端: 他只会生成 最简单的getter\setter方法的声明和实现,并不会对传入的数据进行过滤
     如果想对传入的数据进行过滤,那么我们就必须重写 setter\getter方法
     如果不想对传入的数据进行过滤,仅仅是提供一个方法给外界操作变量,那么就可以使用
     
     如果利用 @property来生成 getter/setter方法,那么我们可以不写成员变量,系统会自动给我们生成一个 _开头的成员变量
     注意: @property 自动带我们生成的成员变量 是 一个私有的成员变量, 也就是说是.m文件中生成的,而不是在.h文件中生成的
 二、
     如果重写了setter方法,那么property就只会生成getter方法
     如果重写了getter方法,那么property就只会生成setter方法
     如果同时 重写了getter/setter方法,那么@property就不会自动 带我们生成私有的成员变量
 三、注意:
     系统 和 @synthesize 有点区别
     系统直接赋值给 _age
     而使用 @synthesize age; 系统 则会赋值给 age;
 */
#pragma mark - 代码
#import <Foundation/Foundation.h>
#pragma mark 类
#import "Person.h"
#pragma mark - main函数
int main(int argc, const char * argv[])
{
    Person *p = [Person new];
    [p setAge:25];
//    NSLog(@"age = %i",[p age]);
#pragma 验证系统赋值给那个age? _age?
    /*
     注意:
     系统 和 @synthesize 有点区别
     系统直接赋值给 _age
     而使用 @synthesize age; 系统 则会赋值给 age;
     */
//    NSLog(@"age = %i, _age = %i",p->age,p->_age);
//    p->_age
    return 0;
}

######Person

>>>.h
#import <Foundation/Foundation.h>

@interface Person : NSObject
/*
{
    @public
    int _age;
    int age;
}
 */

#pragma @property增强
/*
 从Xcode4.4以后 Apple 对 @property进行一个增强,以后只要利用一个 @property 就可以同时生成 setter 、 getter 方法的声明 和实现
 没有告诉 @property 要将传入的参数赋值给谁,默认 @property 会将传入的属性 赋值给 _开头的成员变量
 
 @property 有一个弊端: 他只会生成 最简单的getter\setter方法的声明和实现,并不会对传入的数据进行过滤
 如果想对传入的数据进行过滤,那么我们就必须重写 setter\getter方法
 如果不想对传入的数据进行过滤,仅仅是提供一个方法给外界操作变量,那么就可以使用
 
 如果利用 @property来生成 getter/setter方法,那么我们可以不写成员变量,系统会自动给我们生成一个 _开头的成员变量
 注意: @property 自动带我们生成的成员变量 是 一个私有的成员变量, 也就是说是.m文件中生成的,而不是在.h文件中生成的
 */
/*
 - (void)setAge:(int)age;
 - (int)age;
 */


// 这里不知道赋值给 同名的age 还是 _age?
@property int age;
@end

>>>.m
#import "Person.h"

@implementation Person

/*
 {
    int _age;
 }
 - (void)setAge:(int)age
 {
    _age = age;
 }
 - (int)age
 {
    _age = age;
 }

 */

/*
 如果重写了setter方法,那么property就只会生成getter方法
 如果重写了getter方法,那么property就只会生成setter方法
 如果同时 重写了getter/setter方法,那么@property就不会自动 带我们生成私有的成员变量
 */
- (void)setAge:(int)age
{
    if (age < 0) {
        age = 0;
    }
    _age = age;
}
@end

© 著作权归作者所有

共有 人打赏支持
lyh2017iOS
粉丝 1
博文 357
码字总数 137380
作品 0
朝阳
私信 提问
OC学习之旅 (一) 内存管理及OC常用方法

最近学习OC,所以在博客写下自己的笔记. OC的基本: 1 id 相当于java的Object 代表任何对象. 所以id是关键字,不能用作变量!! 2 oc中使用"."符号是调用 int a =object.a 是调用的是 [object ge...

Jonson
2013/04/13
0
2
JavaScript 30天每日效果图

JavaScript 30天每日效果图 在Github上看到了wesbos的一个Javascript30天挑战的repo,旨在使用纯JS来进行练习,不允许使用任何其他的库和框架,该挑战共30天,我会在这里复现这30天遇到的挑战...

黎跃春
2017/07/19
0
0
IOS,objective_C中用@interface和 @property 方式声明变量的区别

转自http://www.cnblogs.com/letmefly/archive/2012/07/20/2601338.html 一直有疑问,在objective_C中声明变量会有 2种方式,今天有空和网友讨论了下,并且自己查了stackoverflew后算是稍微弄...

AAAAdler
2012/12/28
0
0
iOS开发之OC与swift开发混编教程,代理的相互调用,block的实现。OC调用Swift中的代理, OC调用Swift中的Block 闭包

本文章将从两个方向分别介绍 OC 与 swift 混编 1. 第一个方向从 swift工程 中引入 oc类   1. 1 如何在swift的类中使用oc类 1.2 如何在swift中实现oc的代理方法 1.3 如何在swift中实现oc的B...

鸿鹄当高远
11/06
0
0
ognl与struts2漏洞的学习

  Struts2这个框架每年都会出现那么几个漏洞,不得不引起斗哥学习的兴趣。本期将从Struts2的一个罪魁祸首ONGL表达式开始介绍到S2-001漏洞的分析。Struts2系列的漏洞涉及Java Web等相关内容...

FreeBuf
08/22
0
0

没有更多内容

加载失败,请刷新页面

加载更多

deepin中配置robot framework环境

本文永久更新地址:https://my.oschina.net/bysu/blog/2989005 【若要到岸,请摇船:开源中国 不最醉不龟归】 1.在终端中输入pip,回车,如果提示没有该命令,则先安转pip sudo apt-get inst...

不最醉不龟归
45分钟前
3
0
OSChina 周日乱弹 —— 钱不还,我就当你人不在了

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @莱布妮子 :分享Bigleaf的单曲《小鹿》 《小鹿》- Bigleaf 手机党少年们想听歌,请使劲儿戳(这里) 周日在家做什么? 做手工呀, @poorfis...

小小编辑
今天
136
5
EOS docker开发环境

使用eos docker镜像是部署本地EOS开发环境的最轻松愉快的方法。使用官方提供的eos docker镜像,你可以快速建立一个eos开发环境,可以迅速启动开发节点和钱包服务器、创建账户、编写智能合约....

汇智网教程
今天
21
0
《唐史原来超有趣》的读后感优秀范文3700字

《唐史原来超有趣》的读后感优秀范文3700字: 作者:花若离。我今天分享的内容《唐史原来超有趣》这本书的读后感,我将这本书看了一遍之后就束之高阁了,不过里面的内容一直在在脑海中回放,...

原创小博客
今天
30
0
IC-CAD Methodology知识图谱

CAD (Computer Aided Design),计算机辅助设计,指利用计算机及其图形设备帮助设计人员进行设计工作,这个定义同样可以用来近似描述IC公司CAD工程师这个岗位的工作。 早期IC公司的CAD岗位最初...

李艳青1987
今天
40
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部