• iOS学习之Object-C语言属性和点语法(转载收集)


    一、属性
         1、属性的声明:在.h文件中使用@property声明属性。
              @property NSString *name;
          2、属性的作用是生成setter以及getter方法的实现,如果方法内部操作的实例变量未定义,系统会自动生成一个_属性名的实例变量,但是生成的实例变量的可见度是私有的,子类不可访问。 
         3、一旦同时重写了setter、getter方法,并且没有实现@synthesizer,@synthesizer不再生成实例变量。
    二、属性的特性
         1、属性的特性:为属性提供了一些关键字用以控制setter、getter的实现细节,这些关键字称为属性的特性(attribute);
         2、读写性
              1)readonly:只读状态,是告诉编译器,属性只生成getter方法,不生成setter方法;
              2)readwrite:读写状态,是告诉编译器,属性既生成setter方法又生成getter方法,既有设置器,也有访问器,默认的读写特性;
              3)setter=:指定属性生成的setter方法的名字;
              4)getter=:指定属性生成的getter方法的名字。
                   @property (readwrite, setter=setname:, getter = getname) NSString *name;
         3、原子性
              1)atomic:原子特性,setter、getter方法在多线程访问下是绝对安全的,即setter、getter内部做了多线程访问处理。默认的原子特性。
              2)nonatomic:非原子特性,settler、getter方法内部不会做多线程访问处理,仅仅是普通的setter、getter方法。
              3)程序开发过程中,setter、getter会频繁使⽤,如果使⽤atomic需要 不断的对setter、getter加锁解锁以保证线程访问的安全,会⾮常占⽤系统资源,降低系统性能。声明属性时,通常使用nonatomic。
                   @property (nonatomic) NSString *name;
         4、语义特性
              1)如果属性是非对象类型(比如int、float等)属性的语义设置使用assgin;
              2)如果属性是对象类型(比如NSString等)并且要保留这个对象的时候,属性的语义设置使用retain;
              3)如果属性是对象类型并且想要得到对象的副本,使用copy。    
    三、点语法
         1、只要符合系统默认setter、getter书写格式的方法都可以使用点语法,
    属性是一对getter、setter方法,点语法是属性的另一种调用格式。
              setter方法:
              [person setName:@“Lily”];
              使用点语法:
              person.name = @“Lily”;
              getter方法:
              NSString *string = [person name];
              使用点语法
              NSString *string = person.name;
         2、类之间的循环引入问题 (#import 与 @class的区别)
              #import “Woman.h”循环引入的问题;
              #import “”引入类的接口部分,容易造成循环引入;
              @class只会告诉编译器后面的字符是一个类名。并不会引入类的接口部分。使用@class声明类后,要使用类中方法,需要在.m文件引入。

     
    代码块本质上是和其他变量类似。不同的是,代码块存储的数据是一个函数体。使用代码块是,你可以像调用其他标准函数一样,传入参数数,并得到返回值。
    脱字符(^)是块的语法标记。按照我们熟悉的参数语法规约所定义的返回值以及块的主体(也就是可以执行的代码)。下图是如何把块变量赋值给一个变量的语法讲解:

    按照调用函数的方式调用块对象变量就可以了:
    int result = myBlock(4); // result是 28
    具体更多关于块(block)点击
    五:
        className* object = [className new];
    or
        className* object = [[className alloc] init];
     背景说明,new是较为老式的写法,后来发现只有一个new不好使,才引入了alloc和init这种写法,保留new一是向后兼容,二是很多时候是一种更简单的写法。其实是一样的,new在内部调用的alloc和init.
    例如:
      1. MyVeiw * view = [[MyVeiw alloc] init];  
      2.     view.Visible = YES;  
      3.     view.Visible = NO;
  • 相关阅读:
    QQ分享 QQ空间分享 API链接:
    一起谈.NET技术,C# 中奇妙的函数联接序列的五种简单方法 狼人:
    一起谈.NET技术,.NET简谈面向接口编程 狼人:
    一起谈.NET技术,用C#实现HTTP协议下的多线程文件传输 狼人:
    一起谈.NET技术,改善代码设计 —— 简化函数调用(Making Method Calls Simpler) 狼人:
    一起谈.NET技术,改善代码设计 —— 处理概括关系(Dealing with Generalization) 狼人:
    一起谈.NET技术,页面片段缓存(二) 狼人:
    一起谈.NET技术,改善代码设计 —— 简化条件表达式(Simplifying Conditional Expressions) 狼人:
    一起谈.NET技术,回顾.NET Remoting分布式开发 狼人:
    一起谈.NET技术,改善代码设计 —— 优化物件之间的特性(Moving Features Between Objects) 狼人:
  • 原文地址:https://www.cnblogs.com/mrray/p/6728915.html
Copyright © 2020-2023  润新知