zoukankan      html  css  js  c++  java
  • 【原】iOS 同时重写setter和getter时候报错:Use of undeclared identifier '_name';did you mean 'name'

    写了那么多的代码了,平时也没有怎么注意会报这个错误,因为平时都很少同时重写setter和getter方法,一般的话,我们大概都是使用懒加载方法,然后重写getter方法,做一个非空判断。然后有时候根据需求,要同时重写属性的setter和getter方法。系统就会报错误::Use of undeclared identifier '_name';did you mean 'name'

    MARK:如果不想了解太多,直接的解决方法:

    在@implementation 实现中添加一行代码就OK了

    @synthesize wtName = _wtName;

     

    详解一下:

    OC最初设定@property和@synthesize的作用:

    @property的作用是定义属性,声明getter,setter方法。(注意:属性不是变量)
    @synthesize的作用是实现属性的,如getter,setter方法.

    在声明属性的情况下如果重写setter,getter,方法,就需要把未识别的变量在@synthesize中定义,把属性的存取方法作用于变量。如:

    .h文件中

    后来因为使用@property灰常频繁,就简略了@synthesize的表达。

    从Xcode4.4以后@property已经独揽了@synthesize的功能主要有三个作用:

    (1)生成了私有的带下划线的的成员变量因此子类不可以直接访问,但是可以通过get/set方法访问。那么如果想让定义的成员变量让子类直接访问那么只能在.h文件中定义成员    变量了,因为它默认是@protected
    (2)生成了get/set方法的实现
    当:
    用@property声明的成员属性,相当于自动生成了setter getter方法,如果重写了set和get方法,与@property声明的成员属性就不是一个成员属性了,是另外一个实例变量,而这个实例变量需要手动声明。所以会报错误。
    总结:一定要分清属性和变量的区别,不能混淆。@synthesize 声明的属性=变量。意思是,将属性的setter,getter方法,作用于这个变量。
  • 相关阅读:
    CentOS 7 源码编译安装 Mysql 5.7
    Nginx 负载均衡 后端 监控检测 nginx_upstream_check_module 模块的使用
    cronolog 对 tomcat 7 进行日志切割
    OpenStack
    Oracle GoldenGate 异构平台同步(Mysql到Oracle)
    ELK 日志分析体系
    Tengine TCP 负载均衡
    MariaDB GTID 复制同步
    Mycat 安装配置
    Navicat破解
  • 原文地址:https://www.cnblogs.com/handsomeBoys/p/5672352.html
Copyright © 2011-2022 走看看