OC入门到深入理解OC

本文详细介绍了Objective-C中的属性(@property)特性,包括默认生成的成员变量、getter和setter的自动生成以及如何重写以过滤数据。接着,讨论了NSArray的使用场景和优势,强调了类方法的特性。文章还涵盖了静态函数、类方法、局部静态变量、全局静态变量以及静态与非静态全局变量的区别。此外,讲解了const关键字在常量声明和宏定义中的作用,对比了const与宏的区别。最后,提到了内存管理中的strong、weak、__strong、__weak等修饰符的作用,以及init方法的使用和继承中的注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

属性,使用点表示法;

@property默认会自动生成一个_开头的私有成员变量。(在.m文件中生成)以及@gettter和@setter方法的声明和实现。如果需要对传入的数据进行过滤,必须重写@getter/@setter方法,@property则不会自动生成一个 _开头的私有成员变量。@property只能写在类的声明(@interface)中。

数组NSArray

1.不可变数组

  NSArray *array = [NSArray arrayWithObjects:@"iphone", @"123",nil];//nil不可少,代表结束的标志
//获取元素个数
        [array count];
        NSLog(@"count = %ld", [array count]);
//根据index值获取对象
NSLog(@"%@", [array objectAtIndex:0]);
或者直接引用
NSLog(@"%@", array[1]);
​
NSMutableArray *mArr = [NSMutableArray arrayWithObjects:@"zhao",@"peng",@"pengpeng", nil];
    //添加元素
    [mArr addObject:@"hahah"];
    for(int i = 0;i < [mArr count]; i ++){
        NSLog(@"%@",mArr[i]);
    }
//删除元素
[mArr removeLaseObject];
NSLog(@"%@", mArr); // 删除了最后一个;
​
//替换
[mArr replaceObjectAtIndex:0 withObject:@"BSD"]; // 指定位置替换掉
​
//交换指定位置的元素
[mArr exchangeObjectAtIndex:0 withObjectAtIndex:1];
//数值与对象转换
//因为数组和字典中存放的只能是对象类型. 所以一般的数值是不能直接存入的, 只能转化成对象元素才能存入!
//如:
int c = 100;
float f = 1.2;
NSNumber *c1 = [NSNumber numberWithDouble:c];
NSNumber *f1 = [NSNumber numbserWithDouble:f];
//这是把数值转化为了NSNumber格式存入到了字典, 当然你也可以数值转化为字符串格式存入!
NSMubleArray *mArr2 = [NSMutableArray arrayWithObjects:c, f, nil];
​
​
- (BOOL)isEqual:(id)object {
​
    if (object == self) {
​
        return YES;
​
    }
//////////////////////////////////////////
    if (![object isKindOfClass:[NewsEntity class]]) {
​
        return NO;
​
    }
/////////////////////////////////////////////////////
    NewsEntity *entity = (NewsEntity *)object;
​
    if ([entity.title isEqualToString:self.title]) {
​
        return YES;
​
    }
​
    else {
​
        return NO;
​
    }
​
}
Category
An opaque type that represents a category.
typedef struct objc_category *Category;
struct objc_category{
    char  *category_name                                                       OBJC2_UNAVAILABL
    char *class_nameO                                                          OBJC2_UNAVAILABL
    struct objc_method_list *instnace_methods                                 OBJC2_UNAVAILABLE
    struct objc_method_list *class_methods                                    OBJC2_UNAVAILABLE
    struct objc_protocol_list *protocols                                      OBJC2_UNAVAILABLE
}                                                                               OBJC2_UNAVAILAB
//协议的定义:
@protocol 协议名称<NSObject>//默认遵守NSObect名称
  //方法声明
@end
  
  //协议的采纳
  //创建类的时候遵守某个或多个协议
  @interface 类名: 父类<协议名称1,协议名称2>
  @end
  
  //某个协议也可以遵守其他协议
  @proptocal 协议名称<协议名称1.协议名称2>
  //方法声明
  @end
  //proptocal中的@require和@optionl的使用:
  //@required:表示这个方法必须要实现(默认)
  //@optional:表示这个方法不是必须要实现的
  
  //protocal类型限制:
  //增加<hoiseHold>以后,表示obj只能赋值遵守了houseHold协议的对象
  id<houseHold> obj = mm;
  //表示obj2赋值的时候,必须是Girl对象,并其遵守了houseHold的协议
  Girl<houseH
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值