黑马程序员————OC内存管理_Block和@protocol

本文详细介绍了Block和协议在Objective-C编程中的使用方法,包括Block的基本概念、不同类型的应用场景以及如何访问外部变量,同时阐述了协议的作用、使用方式、遵守规则等,旨在帮助开发者更深入地掌握Objective-C的核心特性。

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一、Block

Block也是一种数据类型,效率比较高,用来封装一段代码,可以在任何时候执行


1.没有返回值,没有形参的Block

Block用来保存一段代码
    
    // Block的标志 ^
        
#import <Foundation/Foundation.h>
int main() {

    // 定义block变量
    void(^myblock)() = ^{
        
        NSLog(@"————————");
    };
    
    // 利用block变量调用block内部的代码
    myblock();
    return 0;
}


Block跟函数很像:
/*
 1)可以保存代码
 2)有返回值
 3)有形参
 4)调用方式一样
 */

2.有返回值,有形参的的block

#import <Foundation/Foundation.h>

int main() {
    
     int (^sumblock)(int,int)= ^(int a,int b){
        return a + b;
    };
    
    NSLog(@"%d",sumblock(4,5));
    
      return 0;
}
输出结果:
2015-04-22 20:19:29.945 Block2[31694:2747511] 9

利用Block输出n条横线

#import <Foundation/Foundation.h>

int main() {
    
    // 用一个block来输出n条横线
    void (^lineblock)(int) = ^(int n){
        for(int i = 0;i < n;i++)
        {
             NSLog(@"————————————");
        }
    };
    lineblock(3);
    
    return 0;
}

2015-04-22 20:25:18.139 Block2[31740:2748833] ————————————
2015-04-22 20:25:18.140 Block2[31740:2748833] ————————————
2015-04-22 20:25:18.140 Block2[31740:2748833] ————————————

3.block可以访问外部变量
1)默认情况下,block内部不能修改外面的局部变量
2)给局部变量加上_block关键字,这个局部变量就可以在block内部修改
#import <Foundation/Foundation.h>

int main() {
    
    // 下划线是两横
    __block int b = 20;
    
    void (^block)() = ^{
        
        b = 30;
    };
    block();
    NSLog(@"%d",b);
    return 0;
}

打印结果

2015-04-22 20:40:36.663 Block2[31816:2752837] 30

4.利用typedef定义block类型

    
    // 以后就可以利用myblock这种类型来定义block变量
    typedef int (^myblock)(int,int);
    myblock block;
    myblock b1;
 
    b1 = ^(int a,int b){
        
        return a + b;
    };

    myblock b3 = ^(int a,int b){
        
        return a - b;
    };

二、@protocol 协议

1.基本用途

1)用来声明一大堆方法(不能声明成员变量)

2)只要某个类遵守这个协议,就相当于拥有这个协议中所有的方法声明

3)只要父类遵守了某协议,相当于子类也遵守了


2.格式

<pre name="code" class="objc">    /*
     协议的定义
     
     @protocol 协议名称 <NSObject>
     
     // 方法声明实现
     
     @end
    */


 
 

3.关键字
@required:(默认)必须实现,不然警告
@optional:(随意)不要求实现

4.协议遵守协议
1)一个协议可以遵守其它多个协议,多个协议之间用逗号隔开
2)一个协议遵守了其它协议,就相当于拥有了其它协议的方法声明
3)@protocol 协议名称 <其它协议1,其它协议2>  
      @end
    /*
    // 类遵守协议
    @interface  类名 :父类名<协议名称1,协议名称2>
    @end
    */


5.基协议
NSObject:是一个基协议,最根本最基本的协议

6.定义一个变量的时候,限制这个变量保存的对象遵守某个协议
    
    // id <协议名称> 变量名
    id <myprotocol> obj2;
    
     // 如果没有遵守对应的协议,编译器会警告
    NSObject <myprotocol> *obj;

7.@property中声明的属性也可以用做一个遵守协议的限制
    
   // @property (nonatomic,strong)类名 <协议名> *属性名;
      @property (nonatomic,strong) Dog <myprotocol> *dog;
    
   // @property (nonatomic,strong)id <协议名> 属性名;
      @property (nonatomic,strong) id <myprotocol> dog;
    

8.协议可用定义在单独.h文件中,也可用定义在某个类中

1)如果这个协议只用在某个类中,应该把协议定义在该类中
2)如果这个协议用在很多类中,就应该定义在单独文件中

9.分类可用定义在单独.h和.m文件中,也可用定义在原来类中

1)一般情况下,都是定义在单独文件中
2)定义在原来类中的分类,只要求能看懂语法

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

源码链接: https://pan.quark.cn/s/7b9e1590db2e 在本计划中,我们聚焦于一个基于数字逻辑的药片装瓶系统的构建,这构成了北京邮电大学(北邮)在小学期内向学生提供的一次课程设计课题。该系统致力于模拟实际药品包装的操作流程,借助电子操控自动化技术达成药片的高效且精准的装瓶目标。以下是对该系统设计所涉及的关键知识领域的详尽阐述: 1. **数字逻辑**:数字逻辑是电子工程领域的核心学科,主要探究如何运用二进制数字进行信息的表征与处理。在此项目中,数字逻辑用于构建实现系统的控制机制,诸如计数器、编码器、解码器、触发器等,旨在保障药片装瓶过程的精确调控。 2. **硬件电路构建**:系统可能整合微控制器、传感器、执行机构等硬件单元。例如,微控制器作为系统的心脏,负责接收输入信号,处理数据,并指挥执行机构执行药片装填。传感器负责监测药片的数量瓶装进度,而执行机构如电机则负责实际完成装瓶动作。 3. **计数器**:在药片装瓶的操作过程中,计数器用于追踪已装入瓶子的药片总数,确保达到预设的剂量标准。这可能需要设计同步计数器或异步计数器,以实现精确计数并触发装瓶操作。 4. **编码与解码**:编码器将特定的信息(例如药片种类或剂量)转化为二进制编码,便于硬件设备进行处理;解码器则将这些编码解读为可执行的操作,如切换装瓶路径或启动封盖流程。 5. **触发器**:在系统中,触发器可用于在特定条件达成时启动或中止某个操作,例如当瓶子达到满载时关闭装填机制。 6. **传感器技术**:可能包含重量传感器、光电传感器或机械触碰开关,用于识别瓶子的存在、位置以及药片的数量。这些传感器的精确度直接关联到整个系统的性能水平。 7. **控制算法**...
内容概要:本文针对孤岛微电网在遭受拒绝服务(DoS)攻击下的安全与稳定运行问题,提出了一种基于混合系统理论的弹性二次控制策略,创新性地将动态事件触发机制与DoS攻击防御进行协同设计。该方法在保障微电网电压、频率恢复及有功功率精确均分的同时,有效应对通信链路被恶意阻塞的安全威胁,实现了控制性能与通信资源利用效率的双重优化。通过Simulink仿真平台与Matlab代码实现,验证了所提策略在复杂网络攻击场景下的鲁棒性与有效性,深入分析了系统稳定性条件及攻击容忍边界,为电力信息物理系统(CPS)在面临网络安全挑战时的可靠控制提供了理论依据技术路径。; 适合人群:具备电力系统自动化、分布式控制或网络安全等相关专业背景,熟悉Matlab/Simulink仿真环境,从事微电网控制、信息物理系统安全或弹性控制研究的研究生、科研人员及工程技术人员。; 使用场景及目标:① 提升高比例分布式能源接入背景下孤岛微电网在通信受限与网络攻击耦合场景下的运行可靠性与弹性恢复能力;② 实现低通信开销下的分布式协同控制,优化资源利用并增强系统抗干扰性能;③ 为电力系统中安全-控制联合设计提供可复现的仿真模型与技术方案,推动安全防护从被动响应向主动容忍转变。; 阅读建议:读者应结合文中提供的Matlab代码与Simulink模型开展仿真实验,重点理解动态事件触发机制的设计原理及其与混合系统稳定性分析的融合方法,建议延伸学习DoS攻击建模、弹性控制理论及相关安全性证明技术,以全面掌握该协同设计框架的核心思想与实现细节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值