当我在ARC模式下写以下代码的时候,编译器报错

Semantic
Issue: Property's synthesized getter follows Cocoa naming convention for returning 'owned' objects

@interface ViewController : UIViewController {

NSString *newTitle;

}

@property (strong, nonatomic) NSString *newTitle;

.m

@synthesize newTitle;

这是因为在高版本编译器ARC模式下,这种命名规范是不合理的,可以查看苹果官网的内存管理方面的文档中有说明the
memory management rules

You take ownership of an object if you create it using a method whose name begins with “alloc”, “new”,
“copy”, or “mutableCopy”.

前面带有 new 的属性在@synthesize的时候会生成getter和setter方法,如果有new打头的属性的时候,在生成getter就会调用newTitle方法,编译器认为这是生成

新的对象,而不是get原有的属性,所以就提示错误信息。

解决办法:

1。new前加上别的字符例如theNewTitle

@property (strong, nonatomic) NSString *theNewTitle;

2。重写getter方法

@property (strong, nonatomic, getter=theNewTitle) NSString *newTitle;

3。第三种是可以new开头,但是要告诉编译器不是new个新对象

#ifndef __has_attribute

#define __has_attribute(x) 0 // Compatibility with non-clang compilers

#endif

#if __has_attribute(objc_method_family)

#define BV_OBJC_METHOD_FAMILY_NONE __attribute__((objc_method_family(none)))

#else

#define BV_OBJC_METHOD_FAMILY_NONE

#endif

@interface ViewController : UIViewController
@property (strong, nonatomic) NSString *newTitle;
- (NSString *)newTitle BV_OBJC_METHOD_FAMILY_NONE;
@end

4。这种也可以啊

@synthesize newTitle = _newTitle; // Use instance variable _newTitle for storage

苹果已经有文档Transitioning
to ARC Release Notes
说明了开发者在命名的时候避免以 new 和 copy 开头

Unacceptable Object Names

  • newButton
  • newLabel
  • newTitle

Acceptable Object Names

  • _newButton
  • mewLabel
  • neueTitle

#arc #auto-synthesized #xcode-4.6.1

版权声明:本文为博主原创文章,未经博主允许不得转载。

iOS ARC下命名规则的更多相关文章

  1. iOS ARC下dealloc过程及.cxx_destruct的探究

    前言 这次探索源自于自己一直以来对ARC的一个疑问,在MRC时代,经常写下面的代码: 1 2 3 4 5 6 7 8 9 - (void)dealloc {     self.array = nil; ...

  2. iOS ARC下循环引用的问题 -举例说明strong和weak的区别

    strong:适用于OC对象,作用和非ARC中的retain作用相同,它修饰的成员变量为强指针类型weak:适用于OC对象,作用和非ARC中的assign作用相同,修饰的成员变量为弱指针类型assig ...

  3. iOS ARC 下的单例模式

    #import <Foundation/Foundation.h> @interface RYSingleExample : NSObject<NSCopying> +(ins ...

  4. iOS arc下控制某一文件为非arc

    选中文件加上编译参数 -fno-objc-arc即可.

  5. Cisco IOS版本命名规则

    首先说说IOS的运行平台,c2500.c2600.c4500.c2950代表运行此IOS的硬件平台,例如:C2500指2500系列路由器. 其次,看看IOS的版本,IOS有主版本号:11.0.11.1 ...

  6. 详解 Python 中的下划线命名规则

    在 python 中,下划线命名规则往往令初学者相当 疑惑:单下划线.双下划线.双下划线还分前后……那它们的作用与使用场景 到底有何区别呢?今天 就来聊聊这个话题. 1.单下划线(_) 通常情况下,单 ...

  7. iOS: ARC和非ARC下使用Block属性的问题

    1. Block的声明和线程安全 Block属性的声明,首先需要用copy修饰符,因为只有copy后的Block才会在堆中,栈中的Block的生命周期是和栈绑定的,可以参考之前的文章(iOS: 非AR ...

  8. IOS开发 ARC和非ARC下使用Block属性的问题

    1. Block的声明和线程安全 Block属性的声明,首先需要用copy修饰符,因为只有copy后的Block才会在堆中,栈中的Block的生命周期是和栈绑定的,可以参考之前的文章(iOS: 非AR ...

  9. iOS: ARC & MRC下string内存管理策略探究

    ARC & MRC下string内存管理策略探究 前两天跟同事争论一个关于NSString执行copy操作以后是否会发生变化,两个人整了半天,最后写代码验证了一下,发现原来NSString操作 ...

随机推荐

  1. oracle密码过期,改为原来的密码

    我们都知道Oracle 数据库的用户的密码默认是有有效期限制的,特别是在Cloud上面的DB,有些用户是Cloud自动创建的,我们不知道原来的密码是什么,但是如果密码过期了,如果修改成新的密码,会影响 ...

  2. Pregel Master

  3. ubuntu系统设置密码报错 Module is unknown

    修改账户密码报错 # passwd 报错信息 passwd: Module is unknown passwd: password unchanged   修改配置文件 # cd /etc/pam.d ...

  4. springBoot项目mybatis中加入缓存

    1:maven: <!-- https://mvnrepository.com/artifact/net.sf.ehcache/ehcache-core --> <dependenc ...

  5. 【ZJOI2007】捉迷藏

    题面 Description Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子. 某天,Jiajia.Wind和孩子们决定在家里玩捉迷藏游戏. 他们的家很大且构造很奇特,由N个屋子和N-1条 ...

  6. JavaScript: 变量提升和函数提升

    第一篇文章中提到了变量的提升,所以今天就来介绍一下变量提升和函数提升.这个知识点可谓是老生常谈了,不过其中有些细节方面博主很想借此机会,好好总结一下. 今天主要介绍以下几点: 1. 变量提升 2. 函 ...

  7. ImportError: No module named cx_Oracle

    1.ImportError: No module named cx_Oracle

  8. Go的异常处理 defer, panic, recover

    Go语言追求简洁优雅,所以,Go语言不支持传统的 try…catch…finally 这种异常,因为Go语言的设计者们认为,将异常与控制结构混在一起会很容易使得代码变得混乱.因为开发者很容易滥用异常, ...

  9. 剑指offer——13矩阵中的路径

    题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩阵中 ...

  10. Ctrl快捷键

    Ctrl + a - Jump to the start of the lineCtrl + b - Move back a charCtrl + c - Terminate the command ...