zoukankan      html  css  js  c++  java
  • Error解决:Property's synthesized getter follows Cocoa naming convention for returning 'owned'

    在项目中定义了以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 the newTitle 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:

    1. Renaming that property:

      @property (strong, nonatomic) NSString *theNewTitle;
    2. 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;
    3. 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 none method family as opposed to the new 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.



  • 相关阅读:
    最有影响力的计算机视觉会议及期刊论文
    计算机视觉与图像处理方面的顶级期刊
    总结一下国内搞机器学习和数据挖掘的大牛
    戴尔▪卡耐基《人性的弱点》阅读笔记(1)
    Python GUI之tkinter窗口视窗教程大集合(看这篇就够了)
    自控力极差的人如何自救?
    非技术人员也能看懂云计算,大数据,人工智能
    保罗·多兰《设计幸福》阅读笔记
    神经网络浅讲:从神经元到深度学习----以简单循序的方式带你聊聊深度学习
    从机器学习谈起----极好的一篇机器学习全貌入门文章
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/7142645.html
Copyright © 2011-2022 走看看