I'm currently using the iOS 5 SDK trying to develop my app. I'm trying to make an NSString a property, and then to synthesize it in the .m file (I have done this before with no issues). Now, I came across this: "Semantic Issue: Property's synthesized getter follows Cocoa naming convention for returning 'owned' objects."
This is my code: .h
@interface ViewController : UIViewController {
NSString *newTitle;
}
@property (strong, nonatomic) NSString *newTitle;
.m
@synthesize newTitle;
Does anyone have a clue how I could fix this? Thanks!!
My guess is that the compiler version you’re using follows the memory management rules for declared properties, too — more specifically, for declared properties’ accessors:
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 withnew
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:
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
new
, it belongs to thenone
method family as opposed to thenew
method family: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:
They’ve already been notified that their statement is not quite accurate: the culprit is the getter method name, not the property name.
Edit 17 Jan 2015: I’ve just noticed a recent commit to Clang that suggests option 3 above (using
objc_method_family(none)
), including a fix-it, for the general case where a property name matches one of the special method family prefixes. Xcode will likely incorporate this change eventually.The name of the member starting with new is what triggers the warning. Change the name to editedTitle and the warning will go away. I was unable to find documentation confirming this but through testing was able to determine that member variables that begin with 'new' aggravate the compiler.
Writing a setter manually with the name same as the property's removed this warning.
Unacceptable Object Names
Acceptable Object Names
#arc #auto-synthesized #xcode-4.6.1
** EDIT **
Apparently you can't use mutableCopy either.
ARC does not allow to use "New...." in property name. but you can use "newTitle" by changing getter name.
It doesn't look like what Bavarious was suggesting was what you wanted to do. All you want to do is declare an instance variable
NewTitle
and then synthesize the property. We used to have to declare the instance variable and property. No more.Now, I believe the right way of doing this is the following:
.h
.m
The instance variable for the property
newTitle
is synthesized. You don't want your instance variable to be the same as your property - too easy to make mistakes.See Example: Declaring Properties and Synthesizing Accessors