代码在模拟器上工作正常,但在真实设备上获得nil

时间:2016-06-16 09:31:27

标签: ios objective-c iphone uibutton native

这段代码工作正常,我在模拟器上测试此代码时得到按钮,但是当我测试真实设备时,我得到了n。 按钮在头文件界面中声明

@property (weak, nonatomic)    UIButton *button;

然后它在实现文件

中合成
@synthesize button;

然后在函数调用中我正在做这个

CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width;
CGFloat screenHeight = screenRect.size.height;

screenHeight = screenHeight - 135;

//Call
button = [UIButton buttonWithType:UIButtonTypeCustom];

当我在真实设备(iphone 5)上运行此代码时,该按钮始终为零。我在运行最后一行后调试时注意到了 执行回到

CGFloat screenHeight = screenRect.size.height;

并重新开始,顺便说一下这里没有循环代码。我无法理解这种现象。我在这里失踪了什么。

2 个答案:

答案 0 :(得分:2)

您对按钮的引用较弱,因此在将其添加为子视图之前,它会被取消分配。您可以将其更改为具有强大的参考:

@property (nonatomic, strong) UIButton *button;

或者在将视频添加到视图时保留对该按钮的引用:

UIButton *myButton = [UIButton buttonWithType:UIButtonTypeCustom];
[self.view addSubview:myButton];
_button = myButton;

它现在由视图保留,因此不会被释放。

答案 1 :(得分:1)

code1:

CGRect screenRect = [[UIScreen mainScreen] bounds];
CGFloat screenWidth = screenRect.size.width;
CGFloat screenHeight = screenRect.size.height;

screenHeight = screenHeight - 135;
button = [UIButton buttonWithType:UIButtonTypeCustom];

码2:

CGRect rect = CGRectMake(10, 10, 10, 10);
CGFloat a = rect.size.width;
CGFloat b = rect.size.height;

b = b - 1;
button = [UIButton buttonWithType:UIButtonTypeCustom];

我在设备中运行code1和code2,我发现

code1将返回CGFloat screenHeight = screenRect.size.height;

运行最后一行后,

和code2不会返回。

我想可能是关于设备效率或功能的关系([[UIScreen mainScreen] bounds])。

希望它有所帮助。