我刚刚掌握了Objective-C 2.0
当我尝试在Xcode中构建以下内容时,它失败了.编译器的错误如下:
unsafe_unretained属性'title'的现有ivar'title'必须是__unsafe_unretained.
// main.m
#import <Foundation/Foundation.h>
#import "Movie.h"
int main (int argc, const char * argv[]){
Movie *movie = Movie.new;
NSLog(@"%@", movie);
return 0;
}
// movie.h
#import <Foundation/Foundation.h>
@interface Movie : NSObject{
NSString *title;
int year;
int rating;
}
@property(assign) NSString *title;
@property(assign) int rating;
@property(assign) int year;
@end
#import "Movie.h"
@implementation Movie;
@synthesize title; // this seems to be issue - but I don't understand why?
@synthesize rating;
@synthesize year;
@end
Run Code Online (Sandbox Code Playgroud)
谁能解释我哪里出错了?
Fir*_*eer 54
我假设您正在使用ARC.
在ARC下,属性的所有权限定必须与实例变量(ivar)匹配.所以,例如,如果你说房产是"强大的",那么伊娃也必须是强大的.
在你的情况下,你说该属性是"assign",这与unsafe_unretained相同.换句话说,此属性不保留您设置的NSString的任何所有权.它只是复制NSString*指针,如果NSString消失,它就会消失,指针不再有效.
因此,如果你这样做,ivar 也必须标记__unsafe_unretained匹配(如果你期望编译器为你@synthesize属性)
或者您可以省略ivar声明,并让编译器也为您执行此操作.像这样:
@interface Movie : NSObject
@property(assign) NSString *title;
@property(assign) int rating;
@property(assign) int year;
@end
Run Code Online (Sandbox Code Playgroud)
希望有所帮助.
| 归档时间: |
|
| 查看次数: |
14363 次 |
| 最近记录: |