Object-c: Block (方法块)

本文介绍了Objective-C中Block的基础概念和用法,包括Block的定义、typedef的使用以及如何构建简单的回调机制。通过示例展示了Block如何作为回调在Button类中实现点击事件的处理。
1、block 是个方法块,他可以提前定义,在调用出在执行。定义格式如下:


int (^sum) (int, int) = ^(int a, int b){
return a+b;
};


其中^是block的一个符;


2、还可以将block定义成一个typedef:


typedef (int) (^sum) (int,int);


@property (nonatuomic,assign) sum sumBlock;


3、使用block可以构建一个简单的回掉,下面是核心代码实现:


Button.h


@Class Button;


typedef (void) (^ButtonBlock) (Button *btn);


@interface Button : NSObject


@property (nonautomic,assign) ButtonBlock listenerBlock;


-(void) click;


@end


Button.m


@implementation Button


-(void)click{
_listenerBlock(self); //里面传递一个参数,此参数为Button对象本身。
}


@end


main.m


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


int main(int argc, const char * argv[])
{
@autoreleasepool {
Button *btn =[[[Button alloc]init]autorelease];


btn.listenerBlock = ^(Button *btn){
NSLog(@"%@这个对象被点击了。");
};


[btn click];
}
return 0;


}
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <% // 自动检测是否登录 Object userObj = session.getAttribute("user"); %> <html> <head> <title>宠物管理系统</title> <meta charset="UTF-8"> <style> * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color: #f4f6f9; color: #333; line-height: 1.6; } .container { width: 90%; max-width: 1200px; margin: 20px auto; padding: 20px; background: white; border-radius: 10px; box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1); } /* 导航栏 */ .navbar { background-color: #007BFF; overflow: hidden; padding: 0; position: sticky; top: 0; z-index: 100; } .navbar a { float: left; display: block; color: white; text-align: center; padding: 14px 20px; text-decoration: none; font-size: 16px; } .navbar a:hover { background-color: #0056b3; } .navbar .logout { float: right; background-color: #d9534f; } .navbar .logout:hover { background-color: #c9302c; } .welcome { text-align: center; padding: 20px; color: #495057; } h2 { margin-bottom: 20px; color: #1a73e8; border-bottom: 2px solid #e0e0e0; padding-bottom: 10px; } form { margin: 20px 0; padding: 15px; background: #f8f9fa; border-radius: 8px; } label { display: block; margin-top: 10px; font-weight: bold; color: #555; } input[type="text"], input[type="password"], input[type="email"], input[type="number"], textarea, select { width: 100%; padding: 10px; margin-top: 5px; border: 1px solid #ccc; border-radius: 5px; font-size: 16px; } button, .btn { background-color: #1a73e8; color: white; padding: 10px 20px; border: none; border-radius: 5px; cursor: pointer; font-size: 16px; margin-top: 10px; } button:hover, .btn:hover { background-color: #0d6efd; } .error { color: #d9534f; margin: 10px 0; font-size: 14px; } .success { color: #5cb85c; margin: 10px 0; font-size: 14px; } table { width: 100%; border-collapse: collapse; margin: 20px 0; } table th, table td { padding: 12px; text-align: left; border-bottom: 1px solid #ddd; } table th { background-color: #f2f2f2; color: #333; } table tr:hover { background-color: #f5f5f5; } .link { color: #1a73e8; text-decoration: none; } .link:hover { text-decoration: underline; } footer { text-align: center; padding: 20px; color: #666; font-size: 14px; background-color: #f8f9fa; margin-top: 30px; border-top: 1px solid #eee; } /* 响应式支持 */ @media (max-width: 600px) { .navbar a { float: none; display: block; text-align: left; } .container { width: 95%; padding: 10px; } } </style> </head> <body> <!-- 导航栏 --> <div class="navbar"> <a href="index.jsp">首页</a> <% if (userObj != null) { %> <a href="pets.jsp">宠物管理</a> <a href="PreferenceServlet">智能匹配</a> <a href="PostServlet?action=list">社区动态</a> <a href="health_reminders.jsp">健康提醒</a> <a class="logout" href="UserServlet?action=logout">退出登录</a> <% } else { %> <a href="login.jsp">登录</a> <a href="register.jsp">注册</a> <% } %> </div>请改成简洁的黑白边框的简约页面
最新发布
12-31
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值