zoukankan      html  css  js  c++  java
  • OC 对象调用属性或实例变量或方法的细节。

    
    
    1.成员变量可以理解为所有在类的头上声明的,无论是@interface、@implementation下用大括号括起来或者是用@property声明的变量都可以称作这个类的    成员变量,只是在@implementation下声明的变量是这个类的私有变量,外部无法访问的,而在@interface下声明的变量可设定为全局或者私有变量,      而用@property声明的就是全局变量,是外部既可以访问,内部也可以调用的

    2.首先确定一下,对象.xxx的语法后跟的不是成员变量,是一个可以被访问的方法名,之所以让你感觉"对象.成员"便令这种方式调用,是因为用
    @property定义或者手动设置了这个变量的setter和getter方法的方法名和成员变量一样,实际调用的是方法;(照我说说改一改你的程序,看看)
    [对象 方法]才是OC中标准的调用方法的语法方式,这种方式的原理是向该对象中发送一个消息,如果对象中有相应的消息就会做出回应,这就是OC 的消息机制,目前最常用的也是这一种表示形式


    总结:对象.方法==[对象 方法] (只有在方法名为setter/getter情况下,相等) 没有 对象.属性和对象.成员变量
    如果 要用对象访问成员变量 可以用 对象->属性
    ps: 1.@property NSString *name;

    在implementation中
    self.name=@"字符串";// 可以赋值
    NSLog(@"%@",self.name);//可以取值
           在主函数中
    对象.name=@"字符串";// 可以赋值
    NSLog(@"%@",对象.name);//可以取值
         2.
    {
    NSString *name;
    }
    -(void) setname:(NSString *) n
    {
      self.name=n;// 不报错 ,但不可以赋值 因为这个会产生死循环(self.name=n 相当于 [self setname: n] )这就形成了循环调用问题
    self->name=n; //可以赋值
    name=n;
    }
    -(NSString *) name
    {
    return name;
    }
           在主函数中
    对象.name=@"字符串";// 可以赋值
    NSLog(@"%@",对象.name);//可以取值

       3.
    {
    NSString *name;
    }
    -(void) setName:(NSString *) n
    {
      self.name=n;// 不可以赋值 错误提示:No setter method 'setname':for assignment to property
    name=n;// 可以赋值
    }
    -(NSString *) name
    {
      return name;
    }
           在主函数中
    对象.name=@"字符串";// 不可以赋值
    对象 setName:@"字符串" // 可以赋值
    NSLog(@"%@",对象.name);//可以取值




    3.类方法的意思是不需要声明一个对象(实例)就可以直接调用的方法,通常是有返回值的(否则类方法就无意义了,因为没有对象或者相应的成员变量的 值可以设置)。作用就是返回一些这个类特定的实例,比如字符串的[NSString stringWithFormat:@""];这个类方法,作用就是返回一串自定义的字符串, 用法和[NSString alloc]initWithFormat:@""];没有区别
    但是,实际上用类方法创建的对象是被系统自动归到自动释池下管理的,而用alloc方法创建的对象如果在手动内存管理模式下,需要用release方法进 行释放,这就是两者的区别了
     
  • 相关阅读:
    防火墙透明模式
    HP管理工具System Management Homepage安装配置
    kbmmw 中JSON 中使用SQL 查询
    kbmmw 中JSON 操作入门
    第一个kbmmw for Linux 服务器
    kbmmw 5.02发布
    kbmmw 5.01 发布
    使用delphi 10.2 开发linux 上的Daemon
    使用unidac 在linux 上无驱动直接访问MS SQL SERVER
    使用delphi 10.2 开发linux 上的webservice
  • 原文地址:https://www.cnblogs.com/oc-bowen/p/5021485.html
Copyright © 2011-2022 走看看