oc强化day02内容

day02

类扩展

一般情况下在.m文件中,为类增加私有的属性和方法
例子:

#import "CZPerson.h"
/*
  1、小括号中不可以有任何内容
  2、一般写在.m文件中,增加类的私有成员变量、属性、方法

 */

@interface CZPerson ()
{
//   增加私有成员变量
    int _age;
}
// 增加私有属性
@property (nonatomic,copy) NSString *name;

//增加私有方法
- (void) show;

@end


@implementation CZPerson


- (NSString *)description
{
    [self show];
    return [NSString stringWithFormat:@"age = %d,name = %@",_age,_name];
}


- (void) show
{
    NSLog(@"%d,%@",_age,self.name);

}

@end

类目:

注:类目就是为已存在的类添加新的方法。但是不能添加实例变量。比如系统的类,我们看不到他的.m文件,所以没有办法用直接添加方法的方式去实现。
1.作用
1)可以扩展别人的类,可以作为子类的替代方法。
2)把同一类的代码放到多个文件中。
2.形式
1)文件名:目标类+类目名.h
目标类+类目名.m
2).h文件中

 @interface 需要扩展的类的类名(分类名)
-( )method;
 @end

详细解析和使用见参考文章:http://blog.youkuaiyun.com/jiangwei0910410003/article/details/41775329
非常清晰,一看就懂,佩服文章原作者
类目和类扩展区别:
它与类别的不同之处在于,括号里不需要写名字。同时也可以在类扩展中定义属性以及私有变量。另一个不同之处在于,类扩展必须与类定义以及类的实现同时编 译,也就是说,类扩展只能针对自定义的类,不能给系统类增加类扩展。类扩展定义的方法必须在类的实现中进行实现。如果单独定义类扩展的文件并且只定义属性 的话,也需要将类实现文件中包含进类扩展文件,否则会找不到属性的set和get方法。

MRC转ARC

因为涉及具体操作啥的,直接转参考文章吧,很详细
参考文章:http://blog.youkuaiyun.com/lookyou111/article/details/8936601

SEL

SEL是一种数据类型,代表方法签名,通过它就找到这个对象上方法
个人感觉看上去就是c++的bind和function这类东西,或者理解为函数指针一类的东西
1、定义变量 SEL 变量名称
2、通过@selector(方法名称) 快速生成一个SEL
3、作为方法的实参
4、作为方法的形参
5、作为方法返回值

实际上oc中方法在内存中也是用SEL存储的

这里写图片描述

常用的三个方法:
- (id)performSelector:(SEL)aSelector;
- (id)performSelector:(SEL)aSelector withObject:(id)object;
- (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2;
SEL和NSDictionary联用可以产生如下效果

NSDictionary *dic = [NSDictionary dictionaryWithObjectsAndKeys:  
                                @selector(say),@"say",
                                @selector(eat),@"eat", 
                                 @selector(sleep),@"sleep",nil];  
SEL say_sel = [dic objectForKey:@"say"];
 [self performSelector: say_sel]; 

引用:
参考文章:http://blog.youkuaiyun.com/jjwwmlp456/article/details/41844055(:简单使用 )
参考文章:http://www.cnblogs.com/buro79xxd/archive/2012/04/10/2440074.html(进阶)
参考文章2:http://blog.youkuaiyun.com/libaineu2004/article/details/43733827(原理和总结)

block

block 是一种数据类型,封装代码,本质上就是代码块,类似js的闭包,c++的lamda(区别在于是可以自动捕获外部变量的匿名函数)
函数不能在方法内部或函数内部,但是block可以
作用:
Block可以作为函数参数或者函数的返回值,而本身又可以带输入参数或返回值
block,在多线程、异步任务,集合遍历,集合排序、动画专场用得多
返回值类型
void (*指针名称)();
定义block类型的变量的格式
返回值类型 (^block变量名称)(形参列表);

实现格式
^ 返回值类型 (形参列表){ 语句….. };

例子
参考引用文章:block的简单使用 http://blog.youkuaiyun.com/itpeng523/article/details/23965147

注意:在block 中可以访问局部变量的
默认在block内部不能修改局部变量的值

如果想修改局部变量的值,要再定义这个变量的时候,在前面加上__block

void test6()
{
    //     当你在block内部使用对象的时候,那么block内部就对这个对象有一个强引用
    CZPerson *person =  [[CZPerson alloc] init];
    void (^test)() = ^{
        [person day1];
    };
    person = nil;
}

block作为函数参数类型

格式:
返回值类型(^)(形参列表)
当你发现,多个方法中他们有很多代码都是相同,只有一部分代码是经常变化
你可以把这个经常变化的代码通过block参数传入
例子:

- (void) test:(void (^)()) block
{
    NSLog(@"test");
    block();
}

使用typedef 提高可读性

//typedef 返回值类型 (^block类型名称)(参数列表);

typedef  void (^voidType)();

最后,这个总结文章真棒:
block学习笔记总结
引用参考文章:http://www.cnblogs.com/xinye/archive/2013/03/03/2941203.html

协议和代理模式

(1).协议声明了可以被其他的类实现的方法。协议本身不去实现。
(2).协议不是类,只是一个其他对象可以实现的接口。
定义一个协议:

#import <Foundation/Foundation.h>
@protocol MarryProtocol <NSObject>//定义一个结婚协议,结婚协议也可以继承其它的协议。
@required   //必须遵守的协议,在遵守MarryProtocol协议的类的.m文件中去实现里边的方法。
- (void)washClothes;
- (void)cook;
@optional  //可选的协议
- (void)makeMoney;
@end

代理(委托)模式:自己有需求,但是让别人去做。
定义一个Men类

#import <Foundation/Foundation.h>
#import "RoomService.h" 
@interface Men : NSObject
@property(nonatomic,retain)NSString * name;
@property(nonatomic,assign)id<MarryProtocol> mate;//定义一个代理
-(id)initWithName:(NSString *)name;
-(void)needEat;
@end

定义一个Women类

#import <Foundation/Foundation.h>
#import "MarryProtocol"
@interfaceWomen : NSObject <MarryProtocol>  //遵守协议
@property(nonatomic,retain)NSString * name;
-(id)initWithName:(NSString *)name;
@end

在Men的实现里边

-(void)needEat
{
    [self.mate  cook];
}

在Women的实现里边有一个方法

-(void)cook
{
      NSLog(%@"wonmen正在做饭");
}

主函数里边

men.mate = women;
[men needEat];
打印出:wonmen正在做饭

协议也可以写在一个类里边,用到的时候引入类的头文件就可以。

<think>好的,我需要帮助用户找到蓝牙模块ECB02S3-OC的技术资料、驱动程序和说明文档。首先,我要回忆用户提供的引用内容。引用[1]和[2]都是关于ECB02蓝牙模块的,提到了引脚定义、工作状态指示灯和通信协议等。但用户现在询问的是ECB02S3-OC,这个型号可能与之前的ECB02有所不同,我需要确认是否有这个具体型号的文档。 首先,用户提供的引用中没有直接提到ECB02S3-OC,可能需要引导用户到官方渠道查找。其次,根据现有资料,ECB02系列通常使用类似的AT指令集和通信协议,所以可能技术规格有相似之处。用户可能需要驱动程序,但蓝牙模块通常作为串口设备使用,不需要额外驱动,但需要确认操作系统是否支持。另外,使用说明可能包括AT指令配置和连接步骤,这些在现有引用中部分涉及,比如引脚定义和状态指示灯的含义,可以引用这些信息帮助用户。 接下来,我应该建议用户检查产品标签或联系供应商获取最新资料,因为型号后缀可能代表不同版本或定制型号。同时,提供基于现有ECB02的通用指导,如AT指令的使用方法,并提醒用户注意电压和引脚连接,避免损坏模块。最后,生成相关问题,帮助用户深入解决可能遇到的问题,比如AT指令使用、信号优化和固件升级等。</think>### 关于蓝牙模块ECB02S3-OC的技术资料与使用说明 #### 1. **技术规格书获取建议** - **官方渠道**:建议直接联系模块供应商或制造商(如“汇承科技”)获取最新版技术规格书。型号后缀“S3-OC”可能表示定制版本或特定功能型号,需通过官方确认兼容性[^1]。 - **替代方案**:若无法获取原厂资料,可参考通用ECB02系列文档。例如,ECB02模块支持蓝牙4.2协议,最大传输距离约10米(视环境干扰),工作电压为$3.6\mathrm{V}-6\mathrm{V}$,通信接口为UART(3.3V电平)[^2]。 #### 2. **驱动程序与通信配置** - **驱动程序**:ECB02系列通常无需额外驱动,作为虚拟串口(VCP)设备,主流操作系统(如Windows、Android、Linux)已内置支持。若需调试工具,可下载“蓝牙串口调试助手”类软件。 - **AT指令集**:通过发送AT指令配置模块参数,例如: ```plaintext AT+NAME=ECB02S3-OC // 修改设备名称 AT+UART=115200,0,0 // 设置波特率115200 AT+SCAN // 扫描周边设备 ``` 具体指令需参考技术手册。 #### 3. **硬件连接与使用说明** - **引脚定义**(基于ECB02系列): - `RXD/TXD`:连接MCU的UART接口(需电平匹配,3.3V) - `STA`:蓝牙连接状态指示(高电平表示已连接) - `EN`:睡眠控制引脚,悬空时模块进入低功耗模式 - **信号强度优化**:扫描结果中的第四个参数为RSSI值(如`-23`),值越接近0表示信号越强。若信号弱,可调整天线方向或减少遮挡物[^1]。 #### 4. **典型应用场景** - 工业传感器数据无线传输 - 智能家居设备控制(如通过手机APP) - 低功耗嵌入式系统的远程调试
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值