OC之便利构造器和方法(笔记)

本文详细介绍了Objective-C中的单例模式实现方法,包括如何通过+sharedStudent方法确保在整个应用程序中仅存在一个实例,并探讨了在定义属性时使用copy、assign和retain的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

OC便利构造器和方法:

方法名 又称:selecter(选择器)
-(返回类型)方法名:(参数类型)参数名
//方法体
}
多参数函数:
-(返回类型)方法名:(参数类型)参数名   and方法名:(参数类型)参数名   and方法名:(参数类型)参数名

在静态方法+里面,最好不要调用self,已经不是当前对象。

单例模式:
在程序中,我需要一系列的对象,他们每一个内部都包含有一组变量和功能,是静态的,而且整个程序都只需要拥有一个该类的对象。

例如:
1、控制程序执行的命令器;
2、管理数据库;
3、音效控制;
4、文件处理等等。

main,m文件

//---单例的内存地址内容的改变----

        Student *st5=[Student sharedStudent];

        st5.name=@"庆平";

        NSLog(@"st5=%@",st5.name);

        

        Student *st6=[Student sharedStudent];

        st6.name=@"志强";

        NSLog(@"st5=6%@",st5.name);

student.h文件

//声明单例

+(id) sharedStudent;


student.m文件
//单例模式

static Student *singleton;

+(id) sharedStudent{

    @synchronized(self){//同一时间防止多线程并发访问,当多线程访问时,其他线程要等正在访问的线程访问结束才能进行访问   同步代码段,表示同一时间只允许运行一个线程访问

    if (singleton==nil) {

        singleton=[[Student alloc]init];

    }

    }

    return singleton;

}


定义属性时:什么情况下使用copy,assign,和retain。
      assign用于简单数据类型,如NSInterger ,double bool, retain 和copy 用户对象,copy用于当a指向一个对象,b也想指向同样的对象的时候,如果用assign ,a如果释放,再调用b会crash,如果用copy的方式,a和b各自有自己的内存,就可以解决这个问题。retain会使计数器加一,也可以解决assign的问题。另外atomic和nonatomic 用来决定编译器生成的getter和setter是否为原子操作。在多线程环境下,院子操作是必要的,否则可能引起错误的结构。加了atomic,setter函数会变成下面这样:
if (property!=newValue){
[propertyrelease];
property=[newValueretain];
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值