代码在模拟器上运行良好,但在真实设备上却为零

code works fine on emulator but getting nil on real device

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

@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) 按钮始终为零。我在调试时注意到在 运行ning 最后一行之后 执行回到

CGFloat screenHeight = screenRect.size.height;

又开始了,顺便说一句,这里没有循环代码。我无法理解这种现象。我在这里错过了什么。

代码 1 :

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])。

希望对您有所帮助。

您对按钮的引用很弱,因此在您将其添加为子视图之前它已被释放。您可以将其更改为具有强引用:

@property (nonatomic, strong) UIButton *button;

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

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

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