Objetive-C的随堂笔记

Objective-C

OC是对c语言的扩展,在oc中可以完全实现c的编写

OC可以实现面向对象编程,提供了针对IOS开发的大量类库(类似于c中的函数库)

面向对象编程

提到面向对象就少不了对象、类、类成员……

 

类:对事物的抽象描述,描述这类事物共同的特征(属性)和行为(方法)

下面在oc中定义一个类

@interface  类名:父类

{//成员(实例)属性

-(返回值类型)方法名:参数: //实例方法

+(返回值类型)方法名   //类方法

@end

@implementation 类名

方法实现

@end

 

对象

   类的实例

   对象在内存中具有实际的内存空间

 

对对象的操作

[对象名 方法名:参数:];

对象名->成员//成员(实例)的引用

 

对象名.成员属性 //@property

类名.成员名

[类名 方法名]


类中成员的属性

@private //私有的 只有这个类才能使用,其他的类都不能用。

@protected//保护的只有此类和此类的子类能够使用

@package //介于@private和@protected之间(这个不懂)

@public //类中的成员不受保护,在任何地方都能使用。

一般情况下把成员属性定义为私有通过公有的方法来访问。

如果没有标注是什么类型的,就默认为@protected

 

init初始化方法

-(id)init{

if(self = [super init])

{

//初始化

}  else {

return nil;

}

return self;

}

子类初始化方法要调用父类初始化方法来初始化从父类继承过来的变量

 

类的继承

@interface  子类:父类

//子类的实例变量和方法

@end

 

子类具有父类的所有特征和行为

子类是以父类为模版然后扩建自己的特色

创建子类对象时首先指向父类的init再执行子类的初始化方法init

 

方法的覆盖

 在子类中定义和父类相同的方法,调用时会覆盖父类的方法


首先总结一点昨天忘记总结的一个知识点

 

1.对类对象的判断

iskindof  //判断是否是这个类或这个类的子类的成员或对象

[receiver iskindof :Class];

ismemberof  //判断是否是这个类本身的成员或对象

 

2.对类或实例是否拥有某种方法的判断

-(BOOL) respondsToSelector: selector

 判读实例是否有这样方法

+(BOOL)instancesRespondToSelector:  

判断类是否有这个方法。此方法是类方法,不能用在类的对象

 

开始今天的内容

1.属性 @property    @property 实例类型  实例名称

使用属性之后的实例,系统会自动生成get 和 set 方法,这样我们就不需要每次都写这两个方法了,如果你用了属性后又写了get和set 方法那也没关系,因为你编写的方法会覆盖系统生成的方法。

使用属性就要在实现文件中使用@synthesize

@synthesize  实例变量名

@porperty和 @synthesize 是成对出现的。

 

2.static静态变量

Objective-C中静态变量要写在@implementation之外,而且这个静态变量只能在这个.m  文件中使用,在其他地方直接调用,但是可以通过这个文件中的方法改变它的值

使用:可以用来标记某个方法被调用的次数。


3.协议  @protocol

协议就是一些规则的集合,要继承这个协议就必须要实现协议中包含的方法。

一些类为了增加一些其他特性就会继承一些协议,通过这些协议来扩充自己的特性。

@protocol 协议文件中只有方法的声明,谁继承了这个协议谁就去实现协议中包含的方法。

 

今天讲了oc中的一些基本数据

当然OC支持所有C中的数据类型,intfloat  char …

NSNumber

NSNumber 就是把int float char BOOL…封装成对象

NSNumber类具有一些类方法和实例方法

类方法 : 类方法的基本功能就是创建各种值

NSNumber *IntNumber = [NSNumbernumberWithInt:num];

NSNumber *FloatNumber =[NSNumber numberWithFloat:num2];

实例方法:实例方法就是初始化对象

NSNumber *CNumber = [[NSNumberalloc] initWithChar:c];

另外还有两个用于比较两个NSNumber的实例方法

[(NSNumber *)Number (BOOL)isEqualToNumber:(NSNumber *)aNumber ]

[(NSNumber *)Number compare:(NSNumber *)aNumber ]

 

NSString   可以说这个类是OC中使用最频繁的类

首先怎么创建一个字符串

NSString *str = @"good!";       

           //1)空字符串创建

       NSString *str2 = [[NSString alloc] init];

       str2 = @"test";       

       NSString *str3 = [NSString string];

          //2)快速创建字符串

       NSString *str4 = [[NSString alloc] initWithString:@"pk"];

       NSString *str5 = [NSString stringWithString:@"pk"];       

           //3)格式化创建字符串

NSString*str6=[[NSStringalloc]initWithFormat:@"%d_%d_%d_%d_%d_%@",1,2,3,4,5,str4];


与NSNumber一样,NSString也有一个比较两个对象的方法   

       [str4 isEqualToString:str5]

注:这里不能用“==“来判断。isEqualToString:是用来判断两个对象的内容是否相同,而”==“是用来判断两个对象指针是不是指向同一个事物。

 

类型的转换

//基本数据类型 => 字符串

       //str = [[NSString alloc] initWithFormat:@"%d",5];

       //字符串 => 基本数据类型

       NSString *str7 = [NSString stringWithFormat:@"%d",56];

       int num7 = [str7 intValue]; //字符串转整型

       //字符串转换 ==>> 数组

       NSArray *array = [str6 componentsSeparatedByString:@"_"];

 

字符串的截取

        NSLog(@"substring to 2:%@",[str6 substringToIndex:5]);

       NSLog(@"substring to 2 :%@",[str6 substringFromIndex:5]);    

       //截取某一个范围的字符串

       NSRange rang;

       rang.length = 4;

       rang.location = 2;          //截取的时候,不包含起始位置

        NSLog(@"substring to 2:%@",[str6 substringWithRange:rang]);

字符串查找(查找子串)

       NSString *str8=@"hello01.txt";

       //查找 ,返回范围

       NSRange rang2 = [str8 rangeOfString:@"."];


可变长度的字符串

      NSMutableString *mutableStr =[NSMutableString stringWithString:@"爱大米"];

       //动态的插入内容

       [mutableStr insertString:@"老鼠" atIndex:0];

 

NSArray  数组

//定义数组并且初始化

  NSArray *array1 = [NSArrayarrayWithObject:@"one"];

  NSArray *array2=[NSArray arrayWithObjects:@"one",@"two",@"three",nil];     NSArray *array3 = [NSArray arrayWithArray:array2];

数组的访问

       int len  = [array2 count];//求长度

        NSString *arrayObject = [array3objectAtIndex:3]; //访问元素

       //将数组元素连接成一个字符串

       NSString *newStr = [array2 componentsJoinedByString:@"_"];

可变数组的使用

        NSMutableArray *mutableArray =[NSMutableArray arrayWithObjects:@"one", nil];   

        [mutableArray addObject:@"two"];//----添加元素

[mutableArrayaddObjectsFromArray:array2]; //---添加一个数组

        int length = [mutableArray count]; //----计算长度

 [mutableArray removeLastObject]; //---- 移除最后一个

  [mutableArray removeObjectAtIndex:0]; //---- 移除指定的数据

 

数组的遍历方式:传统方式高效方式

         for (inti=length-1; i>=0; i--) {//----- 传统方式

            NSLog(@"%d =%@",i,[mutableArray objectAtIndex:i]);

       }

for(NSString *str inmutableArray){ //----- 高效方式

                 NSLog(@"obj =%@",str);        

       }

 

NSDictionary  字典

初始化     一组数组

       NSDictionary *dic1 = [NSDictionary dictionaryWithObject:numObjforKey:@"key1"];

       

       初始化多组数据

 NSDictionary*dic2=[NSDictionarydictionaryWithObjectsAndKeys:@"hello",@"key2",@"world",@"key3”,nil];

         用一个字典初始化另外一个字典

      NSDictionary*dic3 = [NSDictionary dictionaryWithDictionary:dic2]; 可变字典

       //----- 初始化

 NSMutableDictionary*dic4=[NSMutableDictionarydictionaryWithObjectsAndKeys:@"one",@"key4",@"two",@"key5",nil];

       //定义成空字典

       NSMutableDictionary *dic5 = [NSMutableDictionary dictionary];

         //将字典dic2整体添加到dic4钟

        [dic4 addEntriesFromDictionary:dic2];       

       //添加一个元素

        [dic4 setValue:@"three"forKey:@"key6"];

       //根据key获取value

        NSLog(@"key6 =  %@",[dic4objectForKey:@"key6"]);

       

字典的遍历

       //1)一般的遍历

       NSArray *keys4 = [dic4 allKeys];

        for(int i=0;i<[dic4count];i++){

        NSLog(@"dic4 key = %@,value=%@",[keys4objectAtIndex:i],[dic4 objectForKey:[keys4 objectAtIndex:i]]);

}       

       //2)高效的for

        for (NSString *key in dic4){

       NSLog(@"dic4 key = %@ ,value = %@",key,[dic4objectForKey:key]);

       }

       //3)使用枚举进行遍历

       NSEnumerator *enum1 = [dic4 keyEnumerator];

       //获取key,如果不为空,则进行偏移

        id key = [enum1 nextObject];

  while (key) {

            NSLog(@"key = %@ ,value = %@",key,[dic4 objectForKey:key]);

      key = [enum1 nextObject];

        }

 



今天先更新到这里,之后随堂整理更新,若有错误欢迎指正,共同交流学习  ------LC

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值