美文网首页
IOS基础之ObjectC

IOS基础之ObjectC

作者: jtsky | 来源:发表于2018-04-23 19:16 被阅读17次

    类的声明和实现

    OC类的声明和实现是分开的,在头文件中声明的变量和方法一般会对外公开。
    一个简单的类声明文件MyClass.h将如图所示:

    @interface MyClass:NSObject{ 
    // 类变量声明
    }
    // 类属性声明
    // 类方法和声明
    @end
    

    实现MyClass.m文件,如下所示

    @implementation MyClass
    // 类方法定义
    @end
    

    对象的创建

    MyClass  *objectName = [[MyClass alloc]init] ;
    

    方法(methods)

    Objective C中声明的方法如下所示:

    -(returnType)methodName:(typeName) variable1 :(typeName)variable2;
    

    事例:

    -(void)calculateAreaForRectangleWithLength:(CGfloat)length 
    andBreadth:(CGfloat)breadth;
    

    其中andBreadth四可选字符串,它可以帮助我们阅读和理解方法,尤其是当方法被调用的时候。在同一个类中调用此方法,我们可以使用下面的语句:

    [self calculateAreaForRectangleWithLength:30 andBreadth:20];
    

    正如上文所说的andBreath使用有助于我们理解breath是20。Self用来指定它是一个对象的方法。

    类方法

    直接而无需创建的对象,可以访问类方法。他们没有任何变量和它关联的对象。示例如下:

    +(void)simpleClassMethod;
    

    它可以通过使用类名(假设作为MyClass类名称)访问,如下所示:

    [MyClass simpleClassMethod];
    

    实例方法

    可以创建的类的对象后只访问实例方法,内存分配到的实例变量。实例方法如下所示:

    -(void)simpleInstanceMethod; 
    

    创建类的对象后,它可以访问它。如下所示:

    MyClass  *objectName = [[MyClass alloc]init] ;
    [objectName simpleInstanceMethod];
    

    Objective C的重要数据类型

    序号 数据类型
    1 NSString字符串
    2 CGfloat 浮点值的基本类型
    3 NSInteger 整型
    4 BOOL 布尔型

    打印日志

    NSLog用于打印一份声明,它将打印在设备日志和调试版本的控制台和分别调试模式上。
    如 NSlog(@"");

    控制结构

    除了几个增补的条款外,大多数的控制结构与C以及C++相同

    属性(properties)

    property是Objective-C的关键词,与@synthesize配对使用,用来让编译好器自动生成与数据成员同名的方法声明。@synthesize则是用来生成对应声明方法的实现。
    property的语法格式:
    @property (参数1,参数2,参数3)类型名字;
    参数1:atomicity(nonatomic) atomicity的默认值是atomic,读取函数为原子操作
    参数2:setter/getter方法(assign/retain/copy) assign/retain/copy 代表赋值的方式
    参数3:读写属性(readwrite/readonly)readonly关键字代表setter不会被生成, 所以它不可以和 copy/retain/assign组合使用。

    Retain vs. Copy!!

    assign基本上是为简单数据类型准备的,而不是NS对象们
    copy : 建立一个索引计数为1的对象,然后释放旧对象
    retain :释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1。
    那上面到底是什么该死的意思呢?
    Copy其实是建立了一个相同的对象,而retain不是:
    比如一个NSString 对象,地址为0×1111 ,内容为@”STR”
    Copy 到另外一个NSString 之后,地址为0×2222 ,内容相同,新的对象retain为1 ,旧有对象没有变化
    retain 到另外一个NSString 之后,地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1
    也就是说,retain 是指针拷贝,copy 是内容拷贝。哇,比想象的简单多了…

    访问属性

    可以使用点运算符访问属性,若要访问上一属性可以执行以下操作:

    self.myString = @"Test";
    

    还可以使用set的方法,如下所示:

    [self setMyString:@"Test"];
    

    类别(categories)

    类用于将方法添加到现有类。通过这种方法可以将方法添加到类,甚至不用执行文件,就可以在其中定义实际的类。MyClass的样本类别,如下所示:

    @interface MyClass(customAdditions)
    - (void)sampleCategoryMethod;
    @end
    
    @implementation MyClass(categoryAdditions)
    
    -(void)sampleCategoryMethod{
       NSLog(@"Just a test category");
    }
    

    Object-C--浅谈Category分类

    数组

    NSMutableArray 和 NSArray 是 ObjectiveC 中使用的数组类,前者是可变数组,后者是不可变数组。如下:

    NSMutableArray *aMutableArray = [[NSMutableArray alloc]init];
    [anArray addObject:@"firstobject"];
    NSArray *aImmutableArray = [[NSArray alloc]
    initWithObjects:@"firstObject",nil];
    

    词典

    NSMutableDictionary和NSDictionary是Objective中使用的字典,前者可变词典,后者不可变词典,如下所示:

    NSMutableDictionary*aMutableDictionary = [[NSMutableArray alloc]init];
    [aMutableDictionary setObject:@"firstobject" forKey:@"aKey"];
    NSDictionary*aImmutableDictionary= [[NSDictionary alloc]initWithObjects:[NSArray arrayWithObjects:
    @"firstObject",nil] forKeys:[ NSArray arrayWithObjects:@"aKey"]];
    

    相关文章

      网友评论

          本文标题:IOS基础之ObjectC

          本文链接:https://www.haomeiwen.com/subject/ltmllftx.html