oc-27-@property的参数

简介:
复制代码
//01加强-10

@property 4.4前

1) @property + 手动实现
2) @property int age; + @synthesize age;//get和set方法的声明和实现都帮我们做了
3) @property int age + @synthesizes age = _b;
@property 4.4增强 .h

@property int age;
1) 生成_age
2) 生成_age的get和set方法的声明
3) 实现_age的get和set方法


// 基本数据类型
int _age;
// set方法的写法
-(void)setAge:(int) age
{
_age = age;
}

// 用assign修饰后,仍旧会生成以上标准的set方法
@property (assign) int age;

// oc对象类型
@property (retain) Car *car ;
// 用retain修饰后,生成如下内存管理代码
-(void)setCar:(int) car
{
if(_car ! = car)
{
[_car release];
_car = [car retain];
}
}

1.内存管理相关参数
retain : release旧值,retain新值(用于OC对象)
assign : 直接赋值,不做任何内存管理(默认,用于非OC对象类型)
copy : release旧值,copy新值(一般用于NSString *//使用@property增强型 生成get和set方法
@property(nonatomic,retain)Car *car;
//.m文件中实际上生成的是
- (void)setCar:(Car *)cat
{
if(_car != car)
{
[_car release];
_car = [car retain];
}
}


1.@property 参数(二)
1、是否要生成set方法(若为只读属性,则不生成)
readonly:只读,只会生成get的声明和实现
readwrite:默认的,同时生成set和get的声明和实现
2.多线程管理(苹果在一定程度上屏蔽了多线程操作)
nonatomic:高性能,一般使用这个
atomic:低性能,默认
atomic是Objc使用的一种线程保护技术,基本上来讲,是防止在写未完成的时候被另外一个线程读取,造成数据错误。而这种机制是耗费系统资源的,所以在iPhone这种小型设备上,如果没有使用多线程间的通讯编程,那么nonatomic是一个非常好的选择。
3.set和get方法的名称
修改set和get方法的名称,主要用于布尔类型。因为返回布尔类型的方法名一般以is开头,修改 名称一般用在布尔类型中的getter。
控制set方法和get方法的名称
setter : 设置set方法的名称,一定有个冒号:
getter : 设置get方法的名称
@property(nonatomic,assign, setter=abc:,getter=haha)int age
复制代码
复制代码
Gamer.h

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

@interface Gamer : NSObject
//{
//    House *_house; // 房间
//}
//- (void)setHouse:(House *)house;
//- (House *)house;


// @property的完整格式
// @property(参数,参数)成员变量类型 成员变量名称(去掉下划线);

//     retain:参数用于对象类型,能够帮我们生成set方法的内存管理代码.
//     assign:参数,用于基本数据类型,不做内存管理代码.

//     atomic:对线程加锁,性能低,安全性高(默认).
//     nonatomic:不对线程加锁,性能高,安全性低.手机端,建议使用nonatomic

//     readonly:只能操作,只给外界提供get方法,不提供set方法.
//     readwirte:可读可写.

//     setter:改set方法的名字
//     getter:改get方法的名字

@property (nonatomic,retain)House *house;//对象类型用retain
// 外界可以读写.如果,只让外界读取,不能写入时,
@property (atomic,assign,readonly)int age;//基本类型用assign
// 判断玩家是否是vip
//BOOL res = game.isVip;
//BOOL res1 = [game isVip];
@property(nonatomic,assign,getter=isVip,setter=noVip:)BOOL vip;
@end


Gamer.m

#import "Gamer.h"

@implementation Gamer
- (void)dealloc
{
    NSLog(@"玩家被释放");
    // 当玩家自己被回收时,对房间进行一次release操作.
    [_house release];
    [super dealloc];
}
//@property已经做了内存管理,下面就不要内存管理了。
//- (void)setAge:(int)age //{ // _age = age; //} //- (void)setHouse:(House *)house //{ // if (_house != house) { // //当玩家换房间时,需要对旧房间做一次release操作 // [_house release]; // // 玩家要进入房间,玩家就要对房间进行一次retain操作. // _house = [house retain]; // } // //} //- (House *)house //{ // return _house; //} @end House.h #import <Foundation/Foundation.h> @interface House : NSObject @property int no; @end House.m #import "House.h" @implementation House - (void)dealloc { NSLog(@"%d房间被释放了",_no); [super dealloc]; } @end main.m #import <Foundation/Foundation.h> #import "Gamer.h" int main(int argc, const char * argv[]) { @autoreleasepool { Gamer *game = [[Gamer alloc] init]; BOOL res = game.isVip; BOOL res1 = [game isVip]; [game noVip:YES]; } return 0; } void demo1(){ Gamer *g = [[Gamer alloc] init]; g.age = 10; NSLog(@"%d",g.age); House *h = [[House alloc] init]; g.house = h; [g release]; [h release]; } void demo() { // 创建1个玩家 Gamer *gamer = [[Gamer alloc] init]; // 玩家1 // 创建1个房间 House *house1 = [[House alloc] init]; // 房间1 1 house1.no = 10; // 创建第二个房间 House *house2 = [[House alloc] init]; // 房间2 1 house2.no = 20; // 玩家进入房间 gamer.house = house1; // 房间 2 gamer.house = house2; // 2号房间 2 [house1 release]; // 房间 1 // 房间1被释放 [house2 release]; // 房间2 1 // gamer.house = house1; // 操作僵尸对象 // gamer.house = house2; [gamer release]; }
复制代码

 


本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/5314235.html,如需转载请自行联系原作者

相关文章
|
机器学习/深度学习 人工智能 边缘计算
人工智能语音转文字(Automatic Speech Recognition, ASR)
人工智能语音转文字(Automatic Speech Recognition, ASR)
1204 1
|
JSON 前端开发 Java
SpringBoot之响应的详细解析
SpringBoot之响应的详细解析
278 0
如何自己搭建一个网站?
通过安装简单的CMS网站管理系统或自助建站系统,快速建立网页。步骤包括域名注册、资料实名制、网站建模、内容修改、SEO配置和上线。网站质量可通过后台更新和维护提升。
640 10
|
数据采集 存储 自然语言处理
快速构建企业智能门户,销售额倍增,人才触手可及 - 爬虫 + RAG + LLM
本文介绍了一款基于大模型的智能企业门户接待系统,旨在通过先进的AI技术,实现企业网站信息的自动化处理与响应,提高客户支持、产品推荐和人才招聘的效率。系统利用爬虫技术自动提取公司官网信息,结合语音识别、大模型生成等技术,支持语音和文本输入,通过RAG(检索增强生成)方式生成精准回答,并支持语音播报,提供类似真人的接待体验。项目涵盖了环境准备、数据构建、代码实现、测试调优、部署等多个阶段,详细记录了开发过程中遇到的问题及解决方案,展示了系统在咨询公司信息、产品询问及招聘岗位咨询等场景下的应用潜力。未来计划在数据类型支持、会话记忆、并发处理、语音合成等方面进一步优化,以提升用户体验和服务质量。
450 0
|
弹性计算 数据可视化 安全
高效部署企业门户网站【阿里云云效平台详细指南】
使用阿里云云效部署企业网站涉及备案域名、ECS、VPC、云效代码仓库和流水线。一键部署通过ROS快速配置,手动部署则需详细配置流水线,包括代码源、构建、部署到ECS。整个流程约10分钟,但需注意网络问题可能导致的异常。一键部署适合快速启动,手动部署适合定制化。文档详细,但可增加常见问题解答和自动化脚本支持。
高效部署企业门户网站【阿里云云效平台详细指南】
|
监控 安全 网络协议
|
机器学习/深度学习 人工智能 数据挖掘
AI技术对开发者职业天花板的双重影响
随着AI技术的不断创新和飞速发展,人工智能技术在软件开发、数据分析、自动化等领域的应用愈发广泛,并产生了深远的影响。尤其是在程序圈中,对于开发者这一职业群体而言,AI技术的融入不仅改变了传统的开发流程,还对开发者的职业前景带来了全新的挑战和机遇。那么本文就来简单聊聊AI技术究竟对开发者的职业天花板是提升还是降低呢?讨论一下AI技术如何影响开发者的职业天花板。
680 3
AI技术对开发者职业天花板的双重影响
|
Python
Python中的and or not
Python中的and or not
1094 1
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的漫画阅读系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的漫画阅读系统的详细设计和实现(源码+lw+部署文档+讲解等)
328 4
|
算法 搜索推荐 Java
用java语言写一个协同过滤算法
用java语言写一个协同过滤算法
548 9