iOS编译问题:Property's synthesized getter follows Cocoa naming convention for returning 'owned'
2016-12-21 18:59
513 查看
原文链接:http://www.tuicool.com/articles/UrUbY3J
该文章提供了角度比较全面的答案!!!
在项目中定义了以new开头的textField,结果报错:
先看我的源码:
解决办法:
最简单的方法是改我们定义属性的名字,不要以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
called
supposed to be a getter method for the
naming conventions state that a method whose name begins with
an object that’s owned by the caller, which is not the case of getter methods.
You can solve this by:
Renaming that property:
Keeping the property name and specifying a getter name that doesn’t begin with one of the special method name prefixes:
Keeping both the property name and the getter name, and telling the compiler that, even though the getter name starts with
it belongs to the
family:
Note that even though this solution allows you to keep
both the property name and the getter name, having a method called
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
They’ve already been notified that their statement is not quite accurate: the culprit is the getter method name, not the property name.v
该文章提供了角度比较全面的答案!!!
在项目中定义了以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.
-newTitleis
supposed to be a getter method for the
newTitleproperty, however
naming conventions state that a method whose name begins with
newreturns
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 the
nonemethod family as opposed to the
newmethod
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
newTitleas
both the property name and the getter name, having a method called
-newTitlethat
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
newor
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开发 error: property's synthesized getter follows Cocoa naming convention for returning 'owned' obj
- Semantic Issue: Property's synthesized getter follows Cocoa naming convention for returning 'owned'
- 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'
- 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(2012-01-
- 错误: Property's synthesized getter follows Cocoa naming convention for returning 'owned'
- Error解决: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
- Propert's synthesized getter follows Cocoa naming convention for returning 'owned' objects
- iOS —— property follows cocoa naming convention for returning 'owned' objects
- Property's synthesized getter follows Cocoa naming convention for returning.
- Property's synthesized getter follows Cocoa naming convention for returning
- Property's synthesized getter follows Cocoa naming convention for returning.
- property follows cocoa naming convention for returning 'owned' objects⚠️
- Property follows Cocoa naming convention for returning 'owned' objects
- 随笔-property follows cocoa naming convention for returning 'owned' objects
- Property follows Cocoa naming convention for returning 'owned' objects 错误解决办法