OC入门到深入理解OC

属性,使用点表示法;

@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<houseHold> *obj2 = mm;
  //让定义的成员属性(对象)遵守某个协议
    @property (nonatomic,strong) Dog<协议名称> * dog;
  
int (^sumBlock)(int, int);
typedef int(^BLOCk) (int, int);
​
int main(int argc, const char * argv[])
{
    @autoreleasepool
    {
        BLOCk sumBlock2;
        sumBlock2 = ^(int num1, int num2)
        {
            NSLog(@"我是sumBlock2");
            return num1 + num2;
        };
        
        sumBlock2(2, 3);
        
    }
    return 0;
}
​
通过下面三种方法可以获取SEL:
a  sel_registerName函数
b  Objective-C编译器提供的@selector()方法
c  NSSelectorFromString()方法
id (* IMP)(id, SEL,...)
objc_msgSend(receiver, selector)
objc_msgSend(receiver, selector, arg1, arg2, ...)
id arr = [[NSArray alloc] init];  //等同于 id __strong arr = [[NSArray alloc] init];
  {
        //自己生成的对象自己持有
        id __strong arr = [[NSArray alloc] in
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值