为什是@property不自动生成属性?

使用 @property 时候,XCode 会自动为我们生 Setter 和 Getter,甚至会自动生成属性。

例如下面的情况:

// .h 文件
@interface Person : NSObject

@property (copy, nonatomic) NSString *name;

@end

// .m 文件
@implementation Person
@end

上面的代码等价于下面的代码(不考虑多线程):

// .h 文件

@interface Person : NSObject
{
    NSString *_name;
}

- (NSString *)name;
- (void)setName:(NSString *)name;

@end

// .m 文件

@implementation Person

- (NSString *)name
{
    return _name;
}
- (void)setName:(NSString *)name
{
    _name = [name copy];
}

@end

但是当我们同时重写 name 的 Getter 和 Setter 的时候,问题就出现了:

同时附上代码:

// .h 文件
@interface Person : NSObject

@property (copy, nonatomic) NSString *name;

@end

// .m 文件
@implementation Person

- (NSString *)name
{
    return _name;
}
- (void)setName:(NSString *)name
{
    _name = [name copy];
}

@end

上面这段代码,XCode 会报警告,说并没有 _name 属性,所以,我们同时重写 name 的 Getter 和 Setter 之后,XCode 就不会自动给我们创建 _name 属性。为什么会这样呢?要理解这个原理就不得不提计算属性这个概念,有些 @property 定义的属性并不一定有

时间: 2024-08-24 17:33:18

为什是@property不自动生成属性?的相关文章

自动生成属性的模型

利用 KVC 实现的自动生成属性的模型 掉用下面的方法 [NSObject createPropertyCodeWithNSDictionary:dataDic[0]]; 在输出控制太输出属性模型, 利用kvc 属性名字与字典的 key 一一对应 但是 我们通常会遇到,字典 key为 id时,这个时候需要我们手动的去改一下属性的名字 ID 还有通常在遍历字典的时候,有的字典的属性有,有的字典没有这个属性,如果按照没有的字典生成的属性,那么有这个属性的字典,也需要我们手动去写上这个属性模型. //

从零开始学Java之IO字符流懒人模式(自动生成属性类,方法类,界面类)

平时做一个项目都要建很多的属性类,方法类和View类,学了IO流之后想了一种办法,就是自己写一串代码,然后在文本文档里写class <类名>加上所有的属性,然后运行一下代码就自动生成了一个  <类名>.java   文件.用myeclipse打开就可以了.同样的道理,你写一个只有   class <类名> 的txt文本文档  点一下另一段代码就自动生成了一个方法类,里面带有增删改查四个简单方法的方法类,还有一个View类. 首先说一下,生成属性类的这段代码: packa

Mybatis自动生成的BO对象继承公共父类(BO中过滤掉公共属性)

使用mybatis的代码生成工具:mybatis-generator,如果自动生成的BO都有公共的属性,则可以指定这些BO继承父类(父类中定义公共属性) 1.定义父类 注意:属性public,不要使用private,让子类BO可以直接操作它 2.BO打jar包,并在mybatis-generator-maven-plugin中指定依赖 注意:一定要把依赖的BO先打jar包 1 <plugin> 2 <groupId>org.mybatis.generator</groupId

C#集合篇,在业务背景下(***产品升级管理):依赖注入,变量声明,三元表达式,常用字符串相关操作方法,ADO.NET,EF机制,T4模板自动生成实体类,ref变量巧用,属性实际运用,唯一性验证

QQ:1187362408 欢迎技术交流和学习 关于系统产品升级报告管理,业务需求: TODO: 1,升级报告管理:依据各县区制定升级报告(关联sAreaCode,给每个地区观看具体升级报告信息) 2,运用的技术:依赖注入,变量声明,三元表达式,常用字符串相关操作方法,ADO.NET,EF机制,T4模板自动生成实体类,ref变量与可null变量巧用,属性实际运用,唯一性验证,url传递中文编码和解码问题 讲解篇:1,服务端aspx,2,服务端后台返回数据(这里采用服务器端程序:aspx.cs)

wpf 通过为DataGrid所绑定的数据源类型的属性设置Attribute改变DataGrid自动生成列的顺序

环境Win10 VS2019 .Net Framework4.8 在wpf中,如果为一个DataGrid绑定到一个数据源,默认情况下DataGrid会为数据源类型的每个属性生成一个列(Column)对象.但并没有简单的方式用来控制列的生成顺序. DataGrid提供了两个与自动生成列有关的事件,分别是: AutoGeneratingColumn 会在为每个属性创建列时引发,引发时列已经创建完毕,在这个事件中可以: 通过e.Column获取已经创建的列对象,并对其进行修改. 通过将e.Cancel

Mybatis自动生成key值

介绍 像MySQL.Sql Server有自动生成主键(递增),Oracle只能用序列生成,或者UUID 那么在MyBatis怎么处理呢,有两个处理方式,那么我们接下来看看怎么处理 编码 useGeneratedKeys useGeneratedKeys (insert and update only) This tells MyBatis to use the JDBC getGeneratedKeys method to retrieve keys generated internally

Intellij IDEA 14中使用MyBatis-generator 自动生成MyBatis代码

Intellij IDEA 14 作为Java IDE 神器,接触后发现,非常好用,对它爱不释手,打算离开eclipse和myeclipse,投入Intellij IDEA的怀抱. 然而在使用的过程中会发现Intellij IDEA也有一些不尽如意的地方,难免会有些不爽:Intellij IDEA 的插件库远不及eclipse的丰富. mybatis-generator在eclipse中有专门的插件,而没有开发出Intellij IDEA能够使用的插件. 不过不用灰心,如果你的项目是使用mave

JAVA入门[7]-Mybatis generator(MBG)自动生成mybatis代码

一.新建测试项目 新建Maven项目MybatisDemo2,修改pom.xml引入依赖.dependencies在上节基础上新增 <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.2</version> </dependency>

hibernate自动生成映射文件

映射文件是O/R Mapping的关键,相当于控制中心.当数据库表较多时,手动配置该映射文件非常耗时.为了快速开发程序,使开发人员的注意力集中到业务逻辑上来,Hibernate官方提供的MiddleGen工具,它可以很方便的生成映射文件.这里下载:http://prdownloads.sourceforge.net/hibernate/?sort_by=date&sort=desc MiddleGen是根据数据库表来生成映射文件的,所以要与数据库进行配置.具体配置如下: [1]修改数据库配置文件