- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题在这里已经有了答案:
If a subclass refers to a superclass ivar, synthesizing an unrelated property fails
(3 个回答)
9年前关闭。
当我 @synthesize
时,我有一些 @properties 在调试器中表现异常它们,然后子类化 Controller 。
当我删除 @synthesize 时,@properties 的行为符合预期。
这是一个基本示例,ViewController
名为 SubClassedViewController
的子类.
View Controller .h
#import <UIKit/UIKit.h>
@interface ViewController : UIViewController {
NSNumber *someNumber;
}
@property (nonatomic, strong) NSNumber *someNumber;
@end
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
@synthesize someNumber; //Strange behavior unless I remove this line
- (void)viewDidLoad
{
[super viewDidLoad];
someNumber = [NSNumber numberWithInt:123];
// Do any additional setup after loading the view, typically from a nib.
}
@end
#import "ViewController.h"
@interface SubClassedViewController : ViewController
@end
#import "SubClassedViewController.h"
@interface SubClassedViewController ()
@end
@implementation SubClassedViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
}
self.
,对象指向子类 Controller ,而不是 NSNumber:
(lldb) po someNumber
$3 = 0x07151a30 <SubClassedViewController: 0x7151a30>
(lldb) po self.someNumber
$4 = 0x08c37f20 123
(lldb) p (int)[someNumber intValue]
error: Execution was interrupted, reason: Attempted to dereference an invalid ObjC Object or send it an unrecognized selector.
The process has been returned to the state before execution.
(lldb) po (UIView*)[someNumber view]
$7 = 0x071574f0 <UIView: 0x71574f0; frame = (0 20; 320 548); autoresize = RM+BM; layer = <CALayer: 0x71575a0>>
NSLog
s 在我的代码中, someNumber 正确指向 NSNumber;它仅在 lldb 中被标识为 SubClassedViewController(据我所知)。
@synthesize
并将 ViewController.m 中的 NSNumber 创建更改为:
_someNumber = [NSNumber numberWithInt:123]; //I added _ before variable name
(lldb) po _someNumber
$0 = 0x0717db70 123
(lldb) po self.someNumber
$1 = 0x0717db70 123
(lldb) po self
$2 = 0x071853a0 <SubClassedViewController: 0x71853a0>
最佳答案
这不是“奇怪的行为”。你得到垃圾对象是因为你的代码是错误的。
当您删除 @synthesize
,编译器会自动合成名称为 _someNumber
的 ivar .这会导致您在 -viewDidLoad
中的错误代码实际上什么都不做。值得注意的是,该行
someNumber = [NSNumber numberWithInt:123];
self.someNumber = [NSNumber numberWithInt:123];
@synthesize
同样,只需让编译器合成您的 ivar。
关于ios - 当@synthesized 然后在子类中访问时,@properties 在调试器中的行为异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15487874/
在 .h 文件中添加了两个属性: @property (assign, nonatomic, readonly) float weightInLbs; @property (strong, nonat
更新到 iOS8.3 后,我开始收到一堆在 iOS8.2 上没有的新警告。其中一个特别引起了我的注意; @property (strong, nonatomic) IBOutlet UITableVi
FINAL EDIT The solution to all life's problems: Switching xcode's "Compiler Version" setting to "LLV
@synthesize 和 @property 在 Xcode 中做什么?请用非常简单的术语进行解释? 最佳答案 您要求简单的术语: @property declares a property in
从 Xcode 4.4 开始具有默认的属性综合。它会自动生成: @synthesize name = _name; source 来自source2 readwrite vs readonly 确
我有几个 UITableViewController,并希望它们都具有多个属性,例如 fetchedResultsController 和 managedObjectContext。所以我为所有这些创
在我的 AppDelegate.h 文件中,我编写了以下代码 @interface iBountyHunterAppDelegate : NSObject { UITabBarControl
我看过下面这段代码: //example.h MKMapView * mapView1; @property (nonatomic, retain) MKMapView * mapView; //ex
我有点困惑,因为在某些教程中只是 在小时 @property (readwrite,nonatomic) NSUInteger DirectProp; 米 @synthesize DirectProp
我正在学习 iPhone 开发。在书中的示例中,属性提到了@synthesize关键字。 对于控件,我在 .h 文件中定义属性,但不在 .m 文件中定义 @synthesize。我正在使用 .text
嗨,我正在尝试了解构造函数在 C++ 中的工作原理。为此,我使用以下示例: class NoDefault { public: NoDefault (const std::string &){}
嗨,我正在尝试了解构造函数在 C++ 中的工作原理。为此,我使用以下示例: class NoDefault { public: NoDefault (const std::string &){}
我正在开发 IOS 应用程序。我确实用 XCode 工具进行了分析,如果我不写自动释放则显示“潜在内存泄漏”消息。这是下面代码块中的错误吗?我不确定。 //TransferList.h @proper
这个问题在这里已经有了答案: What name does the auto-generated ivar take when I just declare a property in XCode
好的,我有我为核心数据创建的类 LoginPass.h 然后我有头等舱 FirstClass.h 然后我需要在 SecondClass 中使用这些类,我在其中使用 @class 声明它们。头文件 Se
我们使用#pragma mark - StackOverFlow Example 来组织我们的功能菜单(实现导航菜单中最内层的菜单)。 我想做的是通过删除不需要的指令(例如 @synthesize)来
我有类似的东西 @property(nonatomic,retain) UIImageView *whiteBfFillUp; @end @synthesize locationManager; 我是
我在最新的 iOS SDK 中使用带有核心数据的示例导航 View 模板。 在 rootViewController.m 文件中,我在 @synthesize 行中看到了这一点: @synthesiz
//SecondPage.h @property (nonatomic, copy) NSString *secondLabelText; +(SecondPage *) newAlloc; +(id
当我第一次学习 iOS 编程时(我相信这是来自斯坦福大学 ARC 之前的讲座),我们总是这样综合属性: @synthesize myProperty=_myProperty 但是,这似乎是 defau
我是一名优秀的程序员,十分优秀!