Objective c 现有ivar&x27;标题';对于不安全的未修复财产';标题';必须是不安全的
我刚刚开始学习Objective-C2.0 当我尝试在Xcode中构建以下代码时,它失败了。编译器的错误如下所示: 不安全/未维护财产“所有权”的现有ivar“所有权”必须是不安全/未维护的。Objective c 现有ivar&x27;标题';对于不安全的未修复财产';标题';必须是不安全的,objective-c,Objective C,我刚刚开始学习Objective-C2.0 当我尝试在Xcode中构建以下代码时,它失败了。编译器的错误如下所示: 不安全/未维护财产“所有权”的现有ivar“所有权”必须是不安全/未维护的。 // main.m #import <Foundation/Foundation.h> #import "Movie.h" int main (int argc, const char * argv[]){ Movie *movie = Movie.new; NSLog(@"
// 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
//main.m
#进口
#导入“Movie.h”
int main(int argc,const char*argv[]{
Movie*Movie=Movie.new;
NSLog(@“%@”,电影);
返回0;
}
//电影
#进口
@接口电影:NSObject{
NSString*标题;
国际年;
国际评级;
}
@属性(分配)NSString*标题;
@财产(转让)评级;
@物业(转让)年;
@结束
#导入“Movie.h”
@实施电影;
@综合标题;//这似乎是个问题,但我不明白为什么?
@综合评分;
@综合年;
@结束
谁能解释一下我哪里出错了吗?我想你是在用ARC 在ARC下,属性的所有权限定必须与实例变量(ivar)匹配。例如,如果你说属性是“强的”,那么ivar也必须是强的 在您的情况下,您说的属性是“assign”,这与unretained相同。换句话说,此属性不维护您设置的NSString的任何所有权。它只是复制NSString*指针,如果NSString消失,它就会消失,指针不再有效 因此,如果您这样做,ivar也必须标记为“不安全”未恢复以匹配(如果您希望编译器为您@synthesis属性) 或者您可以省略ivar声明,让编译器也为您这样做。像这样:
@interface Movie : NSObject
@property(assign) NSString *title;
@property(assign) int rating;
@property(assign) int year;
@end
希望这会有所帮助。是的,您只需要从ARC中的.h文件中删除ivar声明。例如,只需省略“{NSString*title;int year;int rating;}”