iphone-如何在块中获取实体变量?

问题描述

如何在块中获取实体变量?
访问block中的实体变量。但是在block中得到EXC_BAC_ACCESS。工程里没用ARC。

.h file@interface ViewController : UIViewController{    int age; // an instance variable}.m filetypedef void(^MyBlock) (void);MyBlock bb;@interface ViewController ()- (void)foo;@end@implementation ViewController- (void)viewDidLoad{    [super viewDidLoad];    __block ViewController *aa = self;    bb = ^{        NSLog(@""%d"" aa->age);// EXC_BAD_ACCESS here        // NSLog(@""%d"" age); // I also tried this code didn't work    };    Block_copy(bb);    UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];    btn.frame = CGRectMake(10 10 200 200);    [btn setTitle:@""Tap Me"" forState:UIControlStateNormal];    [self.view addSubview:btn];    [btn addTarget:self action:@selector(foo) forControlEvents:UIControlEventTouchUpInside];}- (void)foo{    bb();}@end

为什么会这样?

解决方案

你访问的block块已经在堆栈上分配了;你需要为块指定bb。bb也需要放在类的实体变量中。

  bb= Block_copy(bb);

解决方案二:
先给age设定一个访问函数:

@interface ViewController : UIViewController{  int age; // an instance variable}@property (nonatomic) int age;...

在m文件中,

@implementation ViewController@synthesize age;...

然后设置:

NSLog(@""%d"" aa.age);

如果你分配了适当的ViewController,在block执行前实例不释放

时间: 2024-09-08 13:03:55

iphone-如何在块中获取实体变量?的相关文章

变量 属性-JAVA初始块中的变量与类中的成员变量区别

问题描述 JAVA初始块中的变量与类中的成员变量区别 class Demo{ { a = 4; } int a = 6; public static void main(String[] args){ System.out.println(new Demo().a); } } 两个a是同一个变量吗? 解决方案 是同一个变量. 初始化块中指定的变量a的初始值每次都会被定义时指定的变量a的值所覆盖,因为定义变量时指定的初始值和初始化块中指定的初始值的执行顺序,跟它们在源程序中的排列顺序相同. 详细可

C#中如何获取系统环境变量

原文:C#中如何获取系统环境变量 C#中获取系统环境变量需要用到Environment Class.其中提供了有关当前环境和平台的信息以及操作它们的方法.该类不能被继承.   以下代码得到%systemdrive%的值,即"C:" string sPath = Environment.GetEnvironmentVariable("systemdrive") string sPath = Environment.GetEnvironmentVariable(&quo

线程类中可以用静态代码块做初始化静态变量么?这些静态变量会不会有并发问题呢?

问题描述 线程类中可以用静态代码块做初始化静态变量么?这些静态变量会不会有并发问题呢? public class SalesConfirmationUploadThread extends Thread { private boolean result = false; private final SalesConfirmationPipedInputStream input; private long orderId; private String pin; private JingdongS

delphi-Delphi中,怎么获取DLL中定义的变量

问题描述 Delphi中,怎么获取DLL中定义的变量 可以使用动态加载或静态加载的方式使用DLL中的方法,但是怎么能够获取DLL中定义的变量来使用它呢? 解决方案 要明确2个概念: 1.Dll是EXE的一个变种形态.它是可执行的. 2.Dll虽然由EXE调用,但执行读入内存后,Dll与EXE分别是独立的内存区域,相互不联系的.二者的数据(变量等)不能传递的. 为了能让Dll是EXE通联,往往可以通过以下几种方式建立联系. 1.发消息,它是单相思,消息发出后,对方知道否,接受了吗,不得而知. 2.

SSIS中Sql Task 获取系统变量

原文:SSIS中Sql Task 获取系统变量 执行 SQL 任务使用不同的连接类型时,SQL 命令的语法使用不同的参数标记.例如,ADO.NET 连接管理器类型要求 SQL 命令使用格式为 @varParameter 的参数标记,而 OLE DB 连接类型要求使用问号 (?) 参数标记. 在变量与参数之间的映射中可以用作参数名的名称也因连接管理器类型而异.例如,ADO.NET 连接管理器类型使用带 @ 前缀的用户定义名称,而 OLE DB 连接管理器类型要求使用从 0 开始的序数数值作为参数名

表单-怎么从不同的div块中传值和后台获取

问题描述 怎么从不同的div块中传值和后台获取 如图,我用的form表单提交,当点击三个div块其中一个提交按钮的时候,怎么传值到后台,后台又应该怎么接受 解决方案 你需要的值是什么? 首先submit得提交需要一个form: 没看到你的form,其次,如果你submit是靠form的话, 你form中想要提交的值需要时input.select.textarea这样的表单控件, 其中这些input的name属性值表示的是提交到服务端的参数名称: 如<input name="username

javascript-Android WebView中子窗口iframe的js方法无法获取父窗口window中的js变量?

问题描述 Android WebView中子窗口iframe的js方法无法获取父窗口window中的js变量? 如题,今天写了一个Html页面,包含Js方法若干,其中包括建立全局的js变量.即window.var 另外,Html中包含一个iframe子窗体,子窗体中的Js方法需要调用父窗体Js方法中所建立的那个全局变量 用PC端的浏览器打开主页,iframe可以获取到父窗体中的JS变量,但是用android的WebView打开这个Html页面,却始终无法获取到 尝试了很多种方式都不行,既然PC端

在iphone/android中获取javascript函数调用

问题描述 在iphone/android中获取javascript函数调用 在iphone中: window.location = 'myscheme://FunctionName?Param1=Value1&.........'; 在android中: Android.FunctionName(params); 这样的话可以运行: if(window.Android) Android.FunctionName(params); else window.location = 'myscheme:

如何将放在集合中的实体,在前台获取并且写入下拉列表(easyui)

问题描述 如何将放在集合中的实体,在前台获取并且写入下拉列表(easyui) 解决方案 ajax访问后台,后台以json的方式返回,把获取的数据根据需求组合成html,用jquery把原来的select替换成新的 html,或者在原来的基础上加上新html 解决方案二: jstl是在页面初始化的时候运行的,不能这么用,可以在ajax返回函数里用js创建试试 解决方案三: 不想用json可以后台循环拼个stringBuffer 我是名字="我是各种选项" 然后前台取到后直接铺在你的sel