oc课堂笔记->属性

属性的定义

属性声明:@property相当于setter/getter

属性实现:@synthesize,如果修改setter/getter方法,加这个

例如:@synthesize age = _age;给age重写

语义设置

1,assign如果属性是⾮对象类型(比如int,float等)属性的语义设置使用assign

2,retain如果属性是对象类型(⽐如NSStrng、NSArray等)属性的语义设置使用retain。

3,copy如果属性是对象类型并且想得到参数的copy,使用copy关键字(NSString类型都用copy)

三种语义下的getter/setter

1.//-------->assign下的getter和setter

//getter方法

- (NSInteger)age

{

    return _age;

}

//setter方法

- (void)setAge:(NSInteger)age

{

    _age = age;

}

2,//------->retain下的getter和setter

//除了遵循NSCopying协议和基本数据类型之外的类类型;

//getter方法

- (NSArray *)array

{

    return [[_array retain] autorelease];

}

//setter方法

- (void)setArray:(NSArray *)array

{

    if (_array != array)

    {

        [_array release];

        _array = [array retain];

    }

}

3,//-------->copy下的getter和setter

//遵循了NSCoping协议

//getter

-(NSString *)name

{

    return [[_name retain] autorelease];

}

//setter


-(void)setName:(NSString *)name

{

    if (_name != name)

    {

        [_name release];

        _name = [name copy];

    }

}

//语义设置管理getter,setter内部实现,

//assign:声明的属性是基本数据类型.

@property (nonatomic, assign)NSInteger age;

//retain

@property (nonatomic, retain)NSArray *array;

//copy

@property (nonatomic,copy)NSString *name;

属性的属性

一共3大类
第一类:读写性控制
1.读写性控制(readonly、readwrite、setter、getter)

(1)readonly,告诉编译器,只声明getter方法(无setter方法)。
 例如:@property(readonly)NSString *name;

//等价于 - (NSString *)name;

(2)readwrite,告诉编译器,既声明setter又声明getter。
 例如: @property(readwrite)NSString *name;

//等价于 - (NSString *)name; 


- (void)setName:(NSString *)name

第二类:原子性控制

1.atomic。setter、getter方法在多线程访问下是绝对安全的,即 setter、getter内部做了多线程访问处理。原⼦性控制的默认设置是 atomic

2.nonatomic。setter、getter方法内部不会做多线程访问处理,仅仅是 普通的setter、getter⽅法

3. 例如:@property (readwrite,nonatomic)NSString *name;
 //等价于


- (NSString *)name; 

- (void)setName:(NSString *)name


第三类:语义设置(assign,retain,copy)

1,assign如果属性是⾮对象类型(比如int,float等)属性的语义设置使用assign

2,retain如果属性是对象类型(⽐如NSStrng、NSArray等)属性的语义设置使用retain。

3,copy如果属性是对象类型并且想得到参数的copy,使用copy关键字(NSString类型都用

点语法

1.凡是符合系统默认setter,getter书写格式的方法都可以使用点语法
例如:[person1 setName:@“zhangsan”];可以等价写成
person1.name = @“zhangsan”;


void TIM2_PWMShiftInit_3(TypeDef_Tim* Tim) { TIM_ClockConfigTypeDef sClockSourceConfig = {0}; TIM_OC_InitTypeDef sConfigOC = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0}; GPIO_InitTypeDef GPIO_InitStruct = {0}; Tim->Psc=3; Tim->TimeClock=200000000;// Tim->Frequence=2000;// Tim->Duty=0.5; Tim->DT=2000;// Tim->Arr=Tim->TimeClock/(Tim->Psc+1)/Tim->Frequence/2;// // Tim->CH1Ccr=Tim->Arr-(Tim->Arr*Tim->Duty)-Tim->DT/((Tim->Psc+1)*(1000000000.0f/Tim->TimeClock));// Tim->CH2Ccr=Tim->Arr-(Tim->Arr*Tim->Duty); Tim->Htim.Instance = TIM2; Tim->Htim.Init.Prescaler = Tim->Psc; Tim->Htim.Init.CounterMode = TIM_COUNTERMODE_CENTERALIGNED3; Tim->Htim.Init.Period = Tim->Arr; Tim->Htim.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; Tim->Htim.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; HAL_TIM_Base_Init(&Tim->Htim); HAL_TIM_Base_Start_IT(&Tim->Htim);// sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; HAL_TIM_ConfigClockSource(&Tim->Htim, &sClockSourceConfig); HAL_TIM_OC_Init(&Tim->Htim); sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; HAL_TIMEx_MasterConfigSynchronization(&Tim->Htim, &sMasterConfig); sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = Tim->CH1Ccr; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;// sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; HAL_TIM_OC_ConfigChannel(&Tim->Htim, &sConfigOC, TIM_CHANNEL_3); __HAL_TIM_ENABLE_OCxPRELOAD(&Tim->Htim, TIM_CHANNEL_3); sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = Tim->CH2Ccr; sConfigOC.OCPolarity = TIM_OCPOLARITY_LOW;// sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; HAL_TIM_OC_ConfigChannel(&Tim->Htim, &sConfigOC, TIM_CHANNEL_4); __HAL_TIM_ENABLE_OCxPRELOAD(&Tim->Htim, TIM_CHANNEL_4); __HAL_RCC_GPIOB_CLK_ENABLE(); /**TIM2 GPIO Configuration PB10 ------> TIM2_CH3 PB11 ------> TIM2_CH4 */ GPIO_InitStruct.Pin = GPIO_PIN_10|GPIO_PIN_11; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; GPIO_InitStruct.Alternate = GPIO_AF1_TIM2; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); HAL_TIM_PWM_Start(&Tim->Htim, TIM_CHANNEL_3); HAL_TIM_PWM_Start(&Tim->Htim, TIM_CHANNEL_4); } TIM2_PWMShiftInit_3(&MyTim2);是什么意思
04-24
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值