我目前正在关注一本在 Xcode 中使用 arc 之前编写的书中的教程。我有与这里所说的完全相同的问题:
unsafe_unretained 属性 'delegate' 的现有 ivar 'delegate' 必须是 __unsafe_unretained
该问题已得到解答,但尚未明确说明为什么会这样。
书中的代码指出我使用此代码来声明成员变量:
the.h File
___________
#import <Cocoa/Cocoa.h>
@interface TestProgramDelegate : NSObject <NSApplicationDelegate> {
NSWindow *window;
NSTextField *message;
}
@property (assign) IBOutlet NSWindow *window;
@property (assign) IBOutlet NSTextField *message;
@property (assign) IBOutlet NSTextField *inputText;
@end
the.m file
__________
#import "the.h" //File
@implementation theHFileAppDelegate
@synthesize window
@synthesize message
@synthesize inputText
当我在我的 .m 文件中合成变量时,我收到以下错误消息:具有分配属性的属性 'window' 的现有 ivar 'window' 必须是 __unsafe_unretaied。
但是,当我像书中所述删除成员变量的声明时,一切正常,并且我没有收到错误。
the.h File
___________
#import <Cocoa/Cocoa.h>
@interface TestProgramDelegate : NSObject <NSApplicationDelegate> {
NSWindow *window;
NSTextField *message;
}
@property (assign) IBOutlet NSWindow *window;
@property (assign) IBOutlet NSTextField *message;
@property (assign) IBOutlet NSTextField *inputText;
@end
the.m file
__________
#import "the.h" //File
@implementation theHFileAppDelegate
@synthesize window
@synthesize message
@synthesize inputText
我的程序有效,但我想了解为什么这会导致麻烦。非常感谢。