iOS编译问题:Property's synthesized getter follows Cocoa naming convention for returning 'owned'
来源:互联网 发布:spss17.0软件下载 编辑:程序博客网 时间:2024/05/19 15:25
原文链接:http://www.tuicool.com/articles/UrUbY3J
该文章提供了角度比较全面的答案!!!
在项目中定义了以new开头的textField,结果报错:
先看我的源码:
#import <UIKit/UIKit.h>@interface ResetPasswordViewController : UIViewController@property (weak, nonatomic) IBOutlet UITextField *phoneTextField;@property (weak, nonatomic) IBOutlet UITextField *oldPasswordTextField;<span style="color:#FF0000;">@property (weak, nonatomic) IBOutlet UITextField *newPasswordTextField;</span>@property (weak, nonatomic) IBOutlet UITextField *confirmPasswordTextField;@property (weak, nonatomic) IBOutlet UINavigationItem *navigationItem;@end
解决办法:
最简单的方法是改我们定义属性的名字,不要以new、copy、alloc等关键词开头!!!
点击打开链接
y guess is that the compiler version you’re using follows the memory management rules for declared properties, too — more specifically, for declared properties’ accessors:
You take ownership of an object if you create it using a method whose name begins with “alloc”, “new”, “copy”, or “mutableCopy”.
A property named newTitle
, when synthesised, yields a method called -newTitle
, hence the warning/error. -newTitle
is supposed to be a getter method for thenewTitle
property, however naming conventions state that a method whose name begins with new
returns an object that’s owned by the caller, which is not the case of getter methods.
You can solve this by:
Renaming that property:
@property (strong, nonatomic) NSString *theNewTitle;
Keeping the property name and specifying a getter name that doesn’t begin with one of the special method name prefixes:
@property (strong, nonatomic, getter=theNewTitle) NSString *newTitle;
Keeping both the property name and the getter name, and telling the compiler that, even though the getter name starts with
new
, it belongs to thenone
method family as opposed to thenew
method family:#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
Note that even though this solution allows you to keep
newTitle
as both the property name and the getter name, having a method called-newTitle
that doesn’t return an object owned by the caller can be confusing for other people reading your code.
For the record, Apple have published Transitioning to ARC Release Notes , in which they state:
You cannot give a property a name that begins with new
or copy
.
They’ve already been notified that their statement is not quite accurate: the culprit is the getter method name, not the property name.v
- iOS编译问题:Property's synthesized getter follows Cocoa naming convention for returning 'owned'
- iOS:编译错误Property's synthesized getter follows Cocoa naming convention for returning 'owned' objectss
- iOS开发 error: property's synthesized getter follows Cocoa naming convention for returning 'owned' obj
- iOS 错误 property's synthesized getter follows Cocoa naming convention for returning 'owned' objects
- Property's synthesized getter follows Cocoa naming convention for returning 'owned' objects (2012-01
- Semantic Issue: Property's synthesized getter follows Cocoa naming convention for returning 'owned'
- Property's synthesized getter follows Cocoa naming convention for returning 'owned' objects
- Semantic Issue: Property's synthesized getter follows Cocoa naming convention for returning 'owned'
- property's synthesized getter follows Cocoa naming convention for returning 'owned' objects
- property's synthesized getter follows Cocoa naming convention for returning 'owned' objects
- Property's synthesized getter follows Cocoa naming convention for returning 'owned' objects
- warning: property's synthesized getter follows Cocoa naming convention for returning 'owned' object
- property's synthesized getter follows Cocoa naming convention for returning 'owned' objects
- Property's synthesized getter follows Cocoa naming convention for returning 'owned' objects
- property's synthesized getter follows Cocoa naming convention for returning 'owned' objects
- property's synthesized getter follows Cocoa naming convention for returning 'owned' objects
- error: property's synthesized getter follows Cocoa naming convention for returning 'owned' objects
- Error解决:Property's synthesized getter follows Cocoa naming convention for returning 'owned'
- Git使用介绍
- RGB图像之灰度级和通道的理解
- 2815: [ZJOI2012]灾难
- 使用adb命令时的错误
- Win7下Ant的安装与配置
- iOS编译问题:Property's synthesized getter follows Cocoa naming convention for returning 'owned'
- [Android]安全第五步,看懂汇编(续)
- 最近两年的总结
- 快学Scala(2) 控制结构和函数
- CollapsingToolbarLayout 与 TabLayout结合使用实现炫酷效果
- Android开发之拥有Material Design风格的折叠布局
- 清除浮动
- Minimizing quadratic energies with constant constraints
- XMPP学习1-认识XMPP