gpt4 book ai didi

objective-c - unsafe_unretained 属性 'title' 的现有 ivar 'title' 必须是 __unsafe_unretained

转载 作者:太空狗 更新时间:2023-10-30 03:08:59 26 4
gpt4 key购买 nike

我刚刚开始掌握 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

谁能解释我哪里出错了?

最佳答案

我假设您使用的是 ARC。

在 ARC 下,属性的所有权限定必须与实例变量 (ivar) 相匹配。因此,例如,如果您说属性是“强”,那么 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

希望对您有所帮助。

关于objective-c - unsafe_unretained 属性 'title' 的现有 ivar 'title' 必须是 __unsafe_unretained,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8368157/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com