From a709597700e1142c6c363eea71bb41580311ef3a Mon Sep 17 00:00:00 2001 From: wushenghua Date: Tue, 29 Nov 2016 17:17:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ASHBlockTest.xcodeproj/project.pbxproj | 6 ++ .../UserInterfaceState.xcuserstate | Bin 8321 -> 16889 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 55 +++++++++++++ ASHBlockTest/ASHBlockTest/AppDelegate.m | 3 + ASHBlockTest/ASHBlockTest/ViewController.m | 66 +++++++++++++++- ASHBlockTest/ASHBlockTest/ViewController2.h | 14 ++++ ASHBlockTest/ASHBlockTest/ViewController2.m | 74 ++++++++++++++++++ README.md | 71 ++++++++++++++++- 8 files changed, 284 insertions(+), 5 deletions(-) create mode 100644 ASHBlockTest/ASHBlockTest.xcodeproj/xcuserdata/xmfish.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist create mode 100644 ASHBlockTest/ASHBlockTest/ViewController2.h create mode 100644 ASHBlockTest/ASHBlockTest/ViewController2.m diff --git a/ASHBlockTest/ASHBlockTest.xcodeproj/project.pbxproj b/ASHBlockTest/ASHBlockTest.xcodeproj/project.pbxproj index e594582..99df586 100644 --- a/ASHBlockTest/ASHBlockTest.xcodeproj/project.pbxproj +++ b/ASHBlockTest/ASHBlockTest.xcodeproj/project.pbxproj @@ -13,6 +13,7 @@ A930BA351DEC2D7A000A48E0 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A930BA331DEC2D7A000A48E0 /* Main.storyboard */; }; A930BA371DEC2D7A000A48E0 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A930BA361DEC2D7A000A48E0 /* Assets.xcassets */; }; A930BA3A1DEC2D7A000A48E0 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A930BA381DEC2D7A000A48E0 /* LaunchScreen.storyboard */; }; + A930BA431DEC3234000A48E0 /* ViewController2.m in Sources */ = {isa = PBXBuildFile; fileRef = A930BA421DEC3234000A48E0 /* ViewController2.m */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -26,6 +27,8 @@ A930BA361DEC2D7A000A48E0 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; A930BA391DEC2D7A000A48E0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; A930BA3B1DEC2D7A000A48E0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + A930BA411DEC3234000A48E0 /* ViewController2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewController2.h; sourceTree = ""; }; + A930BA421DEC3234000A48E0 /* ViewController2.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewController2.m; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -67,6 +70,8 @@ A930BA381DEC2D7A000A48E0 /* LaunchScreen.storyboard */, A930BA3B1DEC2D7A000A48E0 /* Info.plist */, A930BA2A1DEC2D7A000A48E0 /* Supporting Files */, + A930BA411DEC3234000A48E0 /* ViewController2.h */, + A930BA421DEC3234000A48E0 /* ViewController2.m */, ); path = ASHBlockTest; sourceTree = ""; @@ -151,6 +156,7 @@ buildActionMask = 2147483647; files = ( A930BA321DEC2D7A000A48E0 /* ViewController.m in Sources */, + A930BA431DEC3234000A48E0 /* ViewController2.m in Sources */, A930BA2F1DEC2D7A000A48E0 /* AppDelegate.m in Sources */, A930BA2C1DEC2D7A000A48E0 /* main.m in Sources */, ); diff --git a/ASHBlockTest/ASHBlockTest.xcodeproj/project.xcworkspace/xcuserdata/xmfish.xcuserdatad/UserInterfaceState.xcuserstate b/ASHBlockTest/ASHBlockTest.xcodeproj/project.xcworkspace/xcuserdata/xmfish.xcuserdatad/UserInterfaceState.xcuserstate index 4589f285f372750fbf1b78bef80aa9e848e4a14a..df10a20c2a82629ba375f91c1cd2e0a668f8fc27 100644 GIT binary patch literal 16889 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 delta 5124 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 V@#I&OMqupk_mj$Z)vss7zX2ICr}h8< diff --git a/ASHBlockTest/ASHBlockTest.xcodeproj/xcuserdata/xmfish.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/ASHBlockTest/ASHBlockTest.xcodeproj/xcuserdata/xmfish.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist new file mode 100644 index 0000000..35d657f --- /dev/null +++ b/ASHBlockTest/ASHBlockTest.xcodeproj/xcuserdata/xmfish.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + diff --git a/ASHBlockTest/ASHBlockTest/AppDelegate.m b/ASHBlockTest/ASHBlockTest/AppDelegate.m index 24e3f6c..6d5e9f0 100644 --- a/ASHBlockTest/ASHBlockTest/AppDelegate.m +++ b/ASHBlockTest/ASHBlockTest/AppDelegate.m @@ -8,6 +8,7 @@ #import "AppDelegate.h" +#import "ViewController.h" @interface AppDelegate () @end @@ -17,6 +18,8 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. + + self.window.rootViewController = [[UINavigationController alloc] initWithRootViewController:[ViewController new]]; return YES; } diff --git a/ASHBlockTest/ASHBlockTest/ViewController.m b/ASHBlockTest/ASHBlockTest/ViewController.m index 4c1280c..b6be4a4 100644 --- a/ASHBlockTest/ASHBlockTest/ViewController.m +++ b/ASHBlockTest/ASHBlockTest/ViewController.m @@ -7,9 +7,9 @@ // #import "ViewController.h" - +#import "ViewController2.h" @interface ViewController () - +@property (nonatomic, strong)UILabel* infoLabel; @end @implementation ViewController @@ -17,9 +17,69 @@ - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. + + self.title = @"首页"; + self.view.backgroundColor = [UIColor whiteColor]; + + //第一个int,block的返回值,addBlock block名称,,后面的两个int是传入的参数 + int (^addBlock)(int, int) = ^(int num1, int num2){ + return num1 + num2; + }; + + NSLog(@"相加值是:%d",addBlock(10,20)); + + //先声明,再实现 + int (^mulBlock)(int, int); + mulBlock = ^(int num1, int num2){ + return num1 * num2; + }; + + NSLog(@"相乘值是:%d",mulBlock(2,5)); + + + UIButton* pushNewBtn = [UIButton new]; + pushNewBtn.backgroundColor = [UIColor grayColor]; + [pushNewBtn setTitle:@"点击" forState:UIControlStateNormal]; + pushNewBtn.frame = CGRectMake(20, 150, 80, 50); + [pushNewBtn addTarget:self action:@selector(pushNewAction:) forControlEvents:UIControlEventTouchUpInside]; + + [self.view addSubview:pushNewBtn]; + + self.infoLabel = [UILabel new]; + self.infoLabel.backgroundColor = [UIColor whiteColor]; + self.infoLabel.textColor = [UIColor greenColor]; + self.infoLabel.frame = CGRectMake(120, 150, 180, 50); + self.infoLabel.text = @"还没有点击"; + + [self.view addSubview:self.infoLabel]; + + + __block int num = 20; + + void (^changeNum)(void) = ^(void){ + num = 30; + }; + NSLog(@"变化之前:%d",num); + changeNum(); + NSLog(@"变化之后:%d",num); } - +#pragma mark 点击进入下一页 +- (void)pushNewAction:(id)sender +{ + ViewController2* nextVC = [ViewController2 new]; + + __weak ViewController* wself = self; + + nextVC.getClickInfo = ^(NSInteger tag){ + + __strong ViewController* sself = wself; + + sself.infoLabel.text = [NSString stringWithFormat:@"点击了第%ld个按钮",tag]; + return 1; + }; + [self.navigationController pushViewController:nextVC animated:YES]; +} - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. diff --git a/ASHBlockTest/ASHBlockTest/ViewController2.h b/ASHBlockTest/ASHBlockTest/ViewController2.h new file mode 100644 index 0000000..4aa7dbb --- /dev/null +++ b/ASHBlockTest/ASHBlockTest/ViewController2.h @@ -0,0 +1,14 @@ +// +// ViewController2.h +// ASHBlockTest +// +// Created by xmfish on 16/11/28. +// Copyright © 2016年 ash. All rights reserved. +// + +#import + +@interface ViewController2 : UIViewController + +@property(nonatomic, copy) int(^getClickInfo)(NSInteger); +@end diff --git a/ASHBlockTest/ASHBlockTest/ViewController2.m b/ASHBlockTest/ASHBlockTest/ViewController2.m new file mode 100644 index 0000000..79251d6 --- /dev/null +++ b/ASHBlockTest/ASHBlockTest/ViewController2.m @@ -0,0 +1,74 @@ +// +// ViewController2.m +// ASHBlockTest +// +// Created by xmfish on 16/11/28. +// Copyright © 2016年 ash. All rights reserved. +// + +#import "ViewController2.h" + +@interface ViewController2 () + +@end + +@implementation ViewController2 + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view. + + self.title = @"第二页"; + self.view.backgroundColor = [UIColor whiteColor]; + + UIButton* btn1 = [UIButton new]; + btn1.backgroundColor = [UIColor grayColor]; + [btn1 setTitle:@"按钮1" forState:UIControlStateNormal]; + btn1.frame = CGRectMake(20, 150, 80, 50); + btn1.tag = 1; + [btn1 addTarget:self action:@selector(setTitleBtnAction:) forControlEvents:UIControlEventTouchUpInside]; + + [self.view addSubview:btn1]; + + UIButton* btn2 = [UIButton new]; + btn2.backgroundColor = [UIColor grayColor]; + [btn2 setTitle:@"按钮2" forState:UIControlStateNormal]; + btn2.frame = CGRectMake(120, 150, 80, 50); + btn2.tag = 2; + [btn2 addTarget:self action:@selector(setTitleBtnAction:) forControlEvents:UIControlEventTouchUpInside]; + + [self.view addSubview:btn2]; + +} +- (void)setTitleBtnAction:(id)sender +{ + if([sender isKindOfClass:[UIButton class]]){ + UIButton* btn = sender; + + int (^TempBlock)(NSInteger); + TempBlock = self.getClickInfo; + + if (TempBlock) { + if(TempBlock(btn.tag)) + { + NSLog(@"设置成功"); + } + } + } +} +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +/* +#pragma mark - Navigation + +// In a storyboard-based application, you will often want to do a little preparation before navigation +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + // Get the new view controller using [segue destinationViewController]. + // Pass the selected object to the new view controller. +} +*/ + +@end diff --git a/README.md b/README.md index 32bf6a0..3d61787 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,69 @@ -# ASHBlockTest -Block学习 +#block基础用法 + +### 1. block定义 + +``` + //第一个int,block的返回值,addBlock block名称,,后面的两个int是传入的参数 + int (^addBlock)(int, int) = ^(int num1, int num2){ + return num1 + num2; + }; + + NSLog(@"相加值是:%d",addBlock(10,20)); + + //先声明,再实现 + int (^mulBlock)(int, int); + mulBlock = ^(int num1, int num2){ + return num1 * num2; + }; + + NSLog(@"相乘值是:%d",mulBlock(2,5)); +``` +### 2. 修改局部变量 + +###需要用到 `__block` 参数修饰 + +``` + __block int num = 20; + + void (^changeNum)(void) = ^(void){ + num = 30; + }; + NSLog(@"变化之前:%d",num); + changeNum(); + NSLog(@"变化之后:%d",num); +``` +### 3. block的调用 +直接使用即可 `NSLog(@"相乘值是:%d",mulBlock(2,5));` + +### 4. 使用,可以代替delegate,这个也是我一开始喜欢它的原因 +具体可以项目内的代码,首先先设置 + +``` + __weak ViewController* wself = self; + + nextVC.getClickInfo = ^(NSInteger tag){ + + __strong ViewController* sself = wself; + + sself.infoLabel.text = [NSString stringWithFormat:@"点击了第%ld个按钮",tag]; + return 1; + }; +``` +其中 先设置`__weak`的原因是解决循环引用的问题, 内部 `__strong`是为了防止使用多线程的时候出错的. + +在另一个 VC 先定义一个属性 `@property(nonatomic, copy) int(^getClickInfo)(NSInteger);` + + +``` + int (^TempBlock)(NSInteger); + TempBlock = self.getClickInfo; + + if (TempBlock) { + if(TempBlock(btn.tag)) + { + NSLog(@"设置成功"); + } + } +``` + +其中设置 `TempBlock ` 也是防止多线程的时候被提前释放的问题. \ No newline at end of file