首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我得到的属性在GCDevice.h中'retain (或strong)‘属性必须是object类型?

在Objective-C中,'retain'(或'strong')属性用于指定对象类型的实例变量或属性的内存管理行为。它告诉编译器在引用计数模式下,当一个对象被赋值给这个变量或属性时,要自动增加该对象的引用计数。

'retain'(或'strong')属性必须是对象类型,因为只有对象才具有引用计数。非对象类型(如基本数据类型)不需要进行引用计数,因此不能使用'retain'(或'strong')属性修饰。

为了确保属性是对象类型,可以使用指针类型或Objective-C对象类型,例如NSString、NSArray、NSDictionary等。这些类型都是对象类型,可以使用'retain'(或'strong')属性进行内存管理。

在GCDevice.h中,'retain'(或'strong')属性必须是对象类型,是因为该头文件定义的属性需要进行引用计数的内存管理。这样可以确保属性在使用过程中不会被意外释放或导致内存泄漏。

腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 弹性云服务器(ECS):https://cloud.tencent.com/product/ess
  • 云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
  • 云数据库MySQL版(CMYSQL):https://cloud.tencent.com/product/cmysql
  • 人工智能(AI):https://cloud.tencent.com/product/ai
  • 物联网平台(IoT Hub):https://cloud.tencent.com/product/iothub
  • 移动推送(TPNS):https://cloud.tencent.com/product/tpns
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 区块链(Blockchain):https://cloud.tencent.com/product/baas
  • 元宇宙(Metaverse):https://cloud.tencent.com/product/metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS_理解“属性”(property)这一概念

对于类定义实例变量,如果有增删,则访问其时偏移量就会相应改变,修之后又必须重新编译。...一般情况下不要求属性必须“原子性”,因为这也不能保证“线程安全”(thread safe)。...当我们不写这些特质时,默认情况: “纯量类型”(scalar type):atomic、readwrite、assign “对象类型”(object type):atomic、readwrite、strong...以下面试遇到过问题,归类整理了一下。 四、灵魂拷问 用assign修饰“对象类型”(object type)会如何? ​...就是执行weakSelf调用方法时,如果self被是否则会导致程序crash。而用strongSelf调用则不会。 xibstoryboard拖控件为什么weak? ​

56520

iOS - 老生常谈内存管理(三):ARC 面世

属性关键字 ARC引入了新属性关键字strong和weak,如下所示: // 以下声明同:@property(retain) MyClass *myObject; @property(strong)...ARC下,strong对象类型属性默认关键字。 ARC,对象类型变量都附有所有权修饰符,总共有以下 4 种。...若要保持与MRC下一致,必须将实例变量使用__weak修饰,使用weak关键字属性。...是的,ARC自动retain/release,也继承了循环引用问题。幸运,迁移到ARC代码很少开始泄漏,因为属性已经声明是否retain。 Q: block 如何在 ARC 工作?...。你甚至可以类和容器中放置strong/weakid对象。ARC编译器会在复制构造函数和析构函数等合成retain/release逻辑以使其运行。

2K10

iOS property多线程问题解析

但实际上可以正常跑完,即使多尝试几次。 ? 问题延伸 多线程问题出现原因 为了更好理解多线程读写属性理解,我们以题目1为样例,假设其代码-viewDidLoad方法。...转换方式:将ViewController.m代码编译,得到ViewController.o文件,再进行还原得到类似的MRC代码。 比如说block代码会生成: ?...) { id oldValue = *object; value = [value retain]; *object = value; [oldValue release]; } 当我们给...综上,答案:NSArray线程安全类,可以用atomic修饰NSArray属性保证属性读写线程安全。 但是,是否涉及NSArray操作,都不需要考虑多线程问题?...我们能保证NSArray类线程安全,但是无法保证NSArray内属性操作线程安全,所以使用NSArray时,仍需要小心多线程问题。 思考题?: 为什么题目3可以正常运行?

1.1K21

Objective-c 知识总结 -- @property

属性指对象特性。 属性声明? 属性声明一种声明变量为属性语法。 属性实现? 声明了实例变量定义了相应访问方法(存取方法)即为实现了属性。..._age); } @end 那个警告明显说,自动合成实例变量__age,而不是 _age,所以你应该定义一个 __age 实例变量才对,不然就警告你; 其实这里间接地证明了,如果你自己定义了相应带下划线实例变量...赋值操作类关键字解析 【重点】 1) assign、unsafe_unretained,仅用于基础数据类型( C 类型) 2) retainstrong、weak、copy,仅用于 OC 对象...* 数组 * 超类属性声明不会包含在里面 * 终端会持续持有这些数组元素,所以不用时候要用 free() 释放掉 * * 如果类没有声明属性 cls = Nil...不过这么做编译器会报错,但是只要新建一个该类类别,类别.h文件写上原始类该方法声明,类别.m文件什么也不写,就可以正常调用私有方法了。这就是传说中私有方法前向引用。

1.3K31

Objective-C属性(property)特性(attribute)

(还有一个retain,不怎么用了) strong (默认值) ARC新增特性。 表明你需要引用(持有)这个对象(reference to the object),负责保持这个对象生命周期。...copy 为了说明copy,我们先举个栗子: 某个类(class1)声明两个字符串属性,一个用copy,一个不用: @property (copy, nonatomic) NSString *nameCopy...这些类型属性赋值时,右边值有可能它们可变版本。这样就会出现属性值被意外改变可能。所以它们都应该用copy。...retain retain是以前非ARC时代特性,ARC下并不常用。 它是strong同义词,两者功能一致。不知道为什么还保留着,这对新手也会造成一定困扰。 所以,总结一下。...问题对象属性strong改为weak 有mutable(可变)版本对象属性strong改为copy 基本数据类型(int, float, BOOL)(非对象属性),用assign 4.扩展

1.9K30

strong,weak, retain, assign区别@property参数

OC:默认对对象都是强引用;如果对象没有强引用会被立即释放 assign:基本数据类型,结构体,枚举,非OC对象类型 以下扯淡比较多 strong与weak由ARC新引入对象变量属性 xcode...,默认标记读写,如果你指定了只读,@implementation只需要一个读取器。...而且如果你试图使用点操作符为属性赋值,你将得到一个编译错误。 readwrite 此标记说明属性会被当成读写,这也是默认属性。设置器和读取器都需要在@implementation实现。...使用垃圾收集应用程序,如果你要一个属性使用assign,且这个类符合NSCopying协议,你就要明确指出这个标记,而不是简单地使用默认值,否则的话,你将得到一个编译警告。...这也就是说,多线程环境下,解析访问器提供一个对属性安全访问,从获取器得到返回值或者通过设置器设置值可以一次完成,即便是别的线程也正在对其进行访问。

1.7K100

【iOS】block小记

block property 还是MRC下,如果我们控制器有一个block属性,那么这个block内存管理语义(retainstrong、copy)也决定了block类型。...答案是否定,不管ARC下我们使用strong/copy/retain哪个关键字修饰block属性,如果有需要,最终编译器都会进行优化,把block copy到堆内存上。...ARC下,虽然,我们使用retain修饰了block属性,但是输出block类型依然堆block,如下图所示: ?...所以,ARC下使用retain/strong/copy修饰block属性效果一样,编译器会在有必要时候自动对其进行copy。...ARC下,使用strong/copy/retain修饰效果一样,block都会被copy到堆上(前提block内部有使用其他变量);使用assign修饰block依然栈上。

5.4K40

iOS 内存管理相关面试题

所有Object会被调用Release。...实际开放中一般属性对象一般 strong 来修饰(NSArray,NSDictionary),使用懒加载定义控件时候,一般也用strong。...相反,如果这N个指针都是弱引用,这个对象马上就被释放 使用 sb 或者 xib 给控件拖线时候,为什么拖出来属性都是用 weak 修饰呢?...存放全局变量、静态变量、常量 堆区:通过malloc等函数new等操作符动态申请得到,需程序员手动申请和释放 栈区:函数模块内申请,函数结束时由系统自动释放。...通过alloc、newmalloc获得内存在堆中分配,堆内存需要写相应代码释放。如果进程结束了堆中分配内存会自动释放。

1.5K30

iOS应用开发:什么ARC

,往往采用下面的准则    生成对象时,使用autorelease    对象代入时,先autorelease后再retain    对象函数返回时,使用return [[object retain...说明:arcstrong对应原来retain与copy,weak对应原来assign。   arc使用有两点: A:build phases修改compiler Flags值。...3,如果使用了arc,@property声明,用strong和weak代替相应retain, copy,和assign。  ...(s1) firstName作为”natsu”字符串对象最初持有者,该NSString类型对象Strong reference (s2) 这里将firstName代入到aName,即aName也成为了...无 retain __strongstrong属性值对应 __strong 关键字,即该属性所声明变量将成为对象持有者。

1.1K60

重读OC属性声明

Semantics(setter讲义) 下面的一系列属性控制都是互斥 strong strong对于被声明变量声明一种强从属(owning)关联关系...此属性只适合class类型,并且还必须组训NSCopying协议 assign 作为默认属性声明,表明这是一个简单setter赋值 这个属性只针对简单数据类型,比如NSInteger...,CRect retain 表明赋值时候retain应该被调用 对于原有的数据会发送一个release消息 Atomicity 使用nonatomic/atomic表明访问是否原子性...,OC默认采用原子性 nonatomic 声明为非原子性,多线程访问不安全 默认情况下属性atomic,因此多线程下提供基于getter和setter分别的线程安全访问...假如你提供了strong,copy和retain没也提供nonatomic,然后引用计数环境下访问getter和setter都是基于lock实现 大概代码如下: [_internal

71320

《Objective-C-高级编程》干货三部曲(一):引用计数篇

下面分别讲解一下这几个修饰符: __strong修饰符 __strong修饰符 id类型和对象类型默认所有权修饰符: __strong使用方法: id obj = [NSObject alloc]...为什么呢? 因为__weak修饰符只持有对象弱引用,也就是说将来访问这个对象时候,无法保证它是否还没有被废弃。...而关于init方法要求则更为严格: 必须实例方法 必须返回对象 返回对象类型必须id类型方法声明类对象类型 4....来看一下属性声明与所有权修饰符关系 属性关键字 所有权 修饰符 assign _unsafeunretained copy __strong retain __strong strong __strong...需要注意:当处理非对象属性时候就不会出现空指针问题。

1.7K40

iOS今日头条第3轮面试回忆

.m文件不能使用self.ivar = @"aa"; 只能使用实例变量_ivar = @"aa";,而外界想要修改只读属性值,需要用到kvc赋值[object setValue:@"mm" forKey...关于修饰符失效 因为atomic修饰属性靠编译器自动生成get和set方法实现原子操作,如果重写了任意一个,atomic关键字特性将失效 4.3 题目: 你初始化方法为什么将参数赋给_name...体力代码”手动编码 4.4 题目: 初始化方法_name什么时候生成?...4.5 题目: 作为returnself在上面时候生成alloc时候分配内存,init初始化。...总之,当修饰可变类型属性时,如NSMutableArray、NSMutableDictionary、NSMutableString,用strong

1.4K20

Objective-C@property和@synthesize用法

copy: setter方法进行Copy操作,与retain一样 nonatomic: 禁止多线程,变量保护,提高性能 参数类型 参数中比较复杂retain和copy,具体分析如下: getter...__unsafe_unretained 无 retain __strongstrong属性值对应 __strong 关键字,即该属性所声明变量将成为对象持有者。...copy 与 strong 区别是声明变量拷贝对象持有者。 assign 一般Scalar Varible用该属性声明,比如,int, BOOL。...retain属性strong 一致;只是可读性更强一些。  声明分类  Objective-C官方文档 Property一章里有对类Property详细说明。...3,声明写方法实现: assign 声明setter方法,采用直接赋值来实现设值操作。

1.5K110

iOS基础·属性修饰词与setter关系

:当你子类重载父类属性,你必须用 @synthesize 手动合成 2.5 示例:重写getter - (NSMutableArray *)dataSource { if (!...修饰词:@synthesize 与 @dynamic 修饰词:告诉编译器是否怎样自动给属性生成存取方法 ---- @property有两个对应修饰词,一个@synthesize,一个@dynamic...除了生成方法代码 getter、setter 之外,编译器还要自动向类添加适当类型实例变量,并且属性名前面加下划线,以此作为实例变量名字。...age 3.2.4 用法场景 当你子类重载了父类属性,你必须使用@synthesize来手动合成实例变量。...这个修饰符不会牵涉到内存管理,但是如果对象类型,可能会导致内存泄漏或者EXC_BAD_ACCESS错误。 除了assign以外其他修饰符,必须用于修饰OC对象

1.1K20

《Objective C编程》笔记

1.为什么main()总是返回0?可以将main()返回结果视为“粗欧文报告”,这样0就是好消息,没有错误就是成功。 2.消息:消息发送(指令)必须写在一对括号,并且必须包含以下两个部分。...5.合并存取属性便捷方法: .h中国,通过@property声明属性,如 @property int w; impl,要求编译器根据@property声明自动合成(synthesize)出存取方法...a.如果用来创建对象方法,其方法名是以allocnew开头,或者包含copy,那么你已经得到了该对象所有权(即可以假设该新对象retain计数时1,且该对象不在NSAutoreleasePool...b.通过任何其他途径创建对象(例如便捷方法),你没有所有权(可以假设新对象retain计数1,而且该对象已经NSAutoreleasePool对象。...28.属性生命周期类型: a.unsafe_unretained(不需要自动归零,不需要保留):凡是非对象类型实例变量,都应该使用该特性。

59530

property属性相关小记

针对目前开发已大多使用ARC自动引用计数技术,因此常用关键字有strong、weak、assign、copy、retain、nonatomic、atomic strong:释放旧对象将旧对象值赋予输入对象...为何block声明都设置为copy属性 声明为copy后,block才会在堆,栈block生命周期和栈绑定。...也可以用retain,blockretain行为默认为copy行为实现,block变量默认声明为栈变量,为了能在block声明域外使用,所以要把block copy到堆,为了属性声明和实际操作一致...不能向编译后得到类增加实例变量 可以向运行时创建类添加实例变量 原因: 编译后类已经注册runtime,类结构体objc_ivar_list实例变量链表和instance_size实例变量内存大小已确定...,runtime会调用class_setvarlayoutclass_setWeaklvarLayout来处理strong、weak引用。

1.1K20

Objective-C 内存管理之 _ARC

大家好,又见面了,全栈君。 内存管理之 ARC 和 自己主动释放池 一、ARC 变量全部权修饰符 变量修饰符,主要用来标识对象生命周期.在手动内存管理方式没有这些概念...._strong 属性基本上能适应 ARC 环境下全部情况.假设不写的话,默觉得_ strong 属性. (2) __weak 不持有对象,仅仅是简单地引用而已....可是你须要在对象属性上使用weak 和strong, 当中strong就相当于retain属性,而weak相当于assign。基础类型还是使用assign。...(id)autorelease;// NSObject提供方法,此方法某一个预定时候,想对象发送 release 消息,返回值接收消息对象.实际上当给一个对象发送 autorelease...ARC 本质上由编译器在编译阶段,合适地方插入 retain 和 release 方法.

55210

ARC(Automatic Reference Counting )技术概述

这里把此技术翻译为自动内存计数器管理技术,下图使用和不使用此技术Objective-C代码区别。 ?...ARC技术随着XCode4.2一起发布缺省工程模板,你可以指定你工程是否支持ARC技术,如果你不指定工程支持ARC技术,代码必须使用管理内存代码来管理内存。...ARC新规则 为了ARC能顺利工作,特增加如下规则,这些规则可能是为了更健壮内存管理,也有可能为了更好使用体验,也有可能简化代码编写,不论如何,请不要违反下面的规则,如果违反,将会得到一个编译期错误...ARC函数和便利变量命名上也有一些新规定 禁止以new开头属性变量命名。...属性变量修饰符 weak和strong两个修饰符新引进,使用例子如下: // 下面的作用和: @property(retain) MyClass *myObject;相同 @

1.6K160
领券