iOS开发之UI(八)

1.属性传值

第一步:在SecondViewController.h中定义一个字符串属性

@property (copy, nonatomic) NSString *string;

第二步:在点击FirstViewController按钮的方法里面给字符串属性赋值

SecondViewController *secondVC = [[SecondViewController alloc] init];
secondVC.string = _textField.text;

第三步:在SecondViewController中使用字符串属性给textField赋值

_textField.text = _string;

2.协议传值

第一步:声明协议

@protocol SecondViewControllerDelegate <NSObject>

- (void)changeValue:(NSString *)text;

@end

第二步:声明代理人

@property (assign, nonatomic) id<SecondViewControllerDelegate> delegate;

第三步:执行协议方法

if (self.delegate != nil && [self.delegate respondsToSelector:@selector(changeValue:)]) {
    [self.delegate changeValue:_textField.text];
}

第四步:签订协议

@interface ViewController () <SecondViewControllerDelegate>

第五步:指定代理人

 secondVC.delegate = self;

第六步:实现协议方法

- (void)changeValue:(NSString *)text {
    _textField.text = text;
}

3.block传值

第一步:重定义block

typedef void (^Block)(NSString *text);

第二步:声明属性

@property (copy, nonatomic) Block block;

第三步:实现block

secondVC.block = ^(NSString *text) {
    _blockTextField.text = text;
};

4.block内存管理

  • 没有使用局部变量的block内存存储在全局区
  • 使用局部变量的block内存存储在栈区
  • 当block变量定义为属性,必须用copy修饰,否则会造成野指针
  • 当不是用block时,需要使用Block_RElease()进行销毁
  • 在非arc下使用__block修饰变量来防止循环引用
  • 在arc下使用__week修饰变量来防止循环引用
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 代码创建UIWindow对象 Xcode7之后使用代码创建UIWindow对象: //创建UIWindow对象 s...
    云之君兮鹏阅读 1,370评论 0 2
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,217评论 30 472
  • 前言 Blocks是C语言的扩充功能,而Apple 在OS X Snow Leopard 和 iOS 4中引入了这...
    小人不才阅读 3,788评论 0 23
  • 一、深复制和浅复制的区别? 1、浅复制:只是复制了指向对象的指针,即两个指针指向同一块内存单元!而不复制指向对象的...
    iOS_Alex阅读 1,441评论 1 27
  • Block基础回顾 1.什么是Block? 带有局部变量的匿名函数(名字不重要,知道怎么用就行),差不多就与C语言...
    Bugfix阅读 6,802评论 5 61