ios9基础知识总结(一)

I--load

类被加载时自动调用,只要类的项目中,运行时就会加载。类一加载,此方法就会调用

//类被加载时调用,只要类的项目中,运行时就会加载,类一加载,此方法就调用

+ (void)load

{

    NSLog(@"load方法被调用");

}

//当使用这个类第一次创建对象时,或第一次调用类方法时,需要初始化一下这个类,该方法会被调用

load   initialize  只有类实例化的第一次的时候才能被调用  以后都不调用

 

 

 

+initialize   

当使用这个类第一次创建对象时,需要初始化一下这个类,该方法会被调用。实际开发中,经常再次方法中初始化一些static的全局变量。第一次使用这个类是自动调用。第一次创建对象;第一次使用类方法

//当使用这个类第一次创建对象时,或第一次调用类方法时,需要初始化一下这个类,该方法会被调用

+ (void)initialize

{

    NSLog(@"initialize方法被调用");

    //实际开发中,经常在此方法中初始化一些static的全局变量

    currentMusic = @"Lemon Tree";

}

 

 

 

-copy

返回一个复制的新对象。会调用对象的copyWithZone方法。需要对象的类型遵守NSCopying协议

 

 

    

// copy代表set方法会release旧对象、copy新对象

// 修改外面的变量,并不会影响到内部的成员变量

// 建议:NSString一般用copy策略,其他对象一般用retain

#pragma mark copying协议的方法

// 这里创建的副本对象不要求释放

则需要重写父类的copying方法

- (id)copyWithZone:(NSZone *)zone {

    Student *copy = [[[self class] allocWithZone:zone] init];

    

    // 拷贝名字给副本对象

    copy.name = self.name;

    

    return copy;

}

只有一种情况是浅拷贝  不可变对象调用copy方法时 是浅拷贝

总结 对于copy的方法  对于不可变的对象都是浅拷贝  既指针复制   不可变的对象有 NSString、NSArray  而mutableCopy都是alloc一个新对象出来 并返回  对于可变的对象mutableCopy、copy都是深拷贝  alloc新的对象并返回  可变的对象有 NSMutableString、NSMutableArray

不论是可变还是不可变 copy返回的对象都是不可变的  mutablecopy返回的对象都是可变的

容器类对象不论是可变还是不可变 copy mutablecopy返回的对象都是和之前一样的  都是浅拷贝

浅拷贝:指针拷贝  不会产生新的对象 原对象计数器的指针+1

 

 

 

 

 

 

-mutableCopy    

返回一个赋值的新对象。会调用对象的mutableCopyWithZone:方法。需要对象的类型遵守mutableCopyWithZone:协议。返回的是可变对象

 

 

 

 

#pragma mark 可变字符串 mutableString的copy (深拷贝)

void mutableStringCopy()

{

    NSMutableString *string = [NSMutableString stringWithFormat:@"余大强的年龄是%i",0];

    //会产生一个新的对象 str的计数器为1

    NSString *str = [string copy];

    //copy 返回的都是不可变的字符串NSString

    [str release];

}

 

//copy语法的目的:改变副本的时候不会影响到原对象

#pragma mark 演示字符串string的拷贝mutablecopy(深拷贝)

void stringMutableCopy()

{

    NSString *string = [[NSString alloc]initWithFormat:@"余大强的 age = %zi",22];

    

    NSMutableString *str = [string mutableCopy];

    //mutableCopy返回的对象都是可变的对象NSMutableString

    NSLog(@"str:%zi", [str retainCount]);

    NSLog(@"string:%zi", [string retainCount]);

    NSLog(@"%@",string);

    //    str和string不是相同对象

    //    NSLog(@"%i", str == string);

    //    NSLog(@"%zi",&string);

    //    NSLog(@"%zi",&str);

    

    //    appendString在字符串的尾部追加字符串

    //字符串的追加 append  一种是按照格式的追加  一种是直接加字符串

    [str appendFormat: @"%d",22];

    [str appendString:@" abcd"];

    NSLog(@"str:%@", str);

    

    [str release];

    [string release];

}

 

 

+class 

返回一个类的类对象 ,Class o =[TRExample class];不加*

 

 

 

 

+superClass  

返回父类的类对象

 

 

 

 

 

 

+isSubclass

[TRExample isSubclassOfClass:[NSObject class]];判断一个类型是否是另一个类型的 子类

  if ([TRExample isSubclassOfClass:[NSObject class]]) 

    {

        NSLog(@"是子类");

     }

 

 

实际中常用的是:[e isKindOfClass:[TRExample class]];

 

— isKindOfClass  判断是否是同类型(一般指的是类的类型是否一致)

     if([obj isKindOfClass:o])

//实际开发中的写法if([e isKindOfClass:[TRExample class]])

       {

           NSLog(@"obj引用指向的对象是TRExample类型");

       }

      else

       {

             NSLog(@"obj指向的对象不是我们需要的类型");

       }

 

////判断引用指向的对象是否是这种类型或这个类的子类型

    if([person isKindOfClass:[NSObject class]]){

        NSLog(@"person指向的对象是NSObject类型");

    }

    if([person isKindOfClass:[TRPerson class]]){

        NSLog(@"person指向的对象是TRPerson类型");

    }

 

 

instancesRespondToSelector: 判断类的方法中是否有某方法 

   void test3()

{   //方法选择器对象,代表show方法

    SEL sel = @selector(show);

    BOOL res = [TRExample instancesRespondToSelector:sel];

//实际开发中的写法[TRExample instancesRespondToSelector:@selector(show)];

    if(res)

    {

        NSLog(@"TRExample类中有实例方法show");

    }

    else

    {

        NSLog(@"TRExample类中没有实例方法show");

    }

}

 

 

- respondsToSelector  询问引用指向的对象是否响应show方法

 

   if([obj respondsToSelector:@selector(show)])

    {

        NSLog(@"obj指向的对象会响应show方法");

        [obj show];

    }

 

4.+ conformsToProtocol  判断一个类是否遵守指定的协议

 

    void test4()

{

    Protocol *p = @protocol(NSCopying);

//实际开发中的写法 if([TRExample conformsToProtocol:@protocol(NSCopying)]);

    if([TRExample conformsToProtocol:p])

    {

        NSLog(@"类TRExample遵守NSCopying协议");

    }

    else

    {

        NSLog(@"类TRExample没有遵守NSCopying协议");

    }

}

 

以上方法在实际开发中的写法 //实际开发中的写法

  void test5()

  {

    TRExample *e = [TRExample new];

    [e isKindOfClass:[TRExample class]];

    [TRExample instancesRespondToSelector:@selector(show)];

    [TRExample conformsToProtocol:@protocol(NSCopying)];

}

 

5.- performSelector 方法的调用

   

   void test6()

  {

    id obj = [TRExample new];

    //调用show方法

    [obj show];

    //调用show方法

    [obj performSelector:@selector(show) withObject:nil];

  }

 

+conformsToProtocol:

Protocol *p=@protocol(NSCopying);加*

BOOL b=[TRExample conformsToProtocol:p];

判断是否遵守协议

实际中:

[TRExample conformsToProtocol:@protocol(NSCopying)];

 

 

 

 

- isEqual 判断两个对象是否相等(包含属性)

 

 

   TRPerson *person = [TRPerson new];

    person.ID = @"1234567890";

    person.name = @"Daniel";

    person.age = 30;

    Class c = [person class];

    Class c2 = [TRPerson class];

    TRPerson *person2 = [[TRPerson alloc]init];

    person2.ID = @"1234567890";

    person2.name = @"Daniel";

    person2.age = 30;

    if([person isEqual:person2]){ // ==

        NSLog(@"两个对象是相等的");

    }else{

        NSLog(@"两个对象是不相等的");

    }

    

    //比较两个引用是否指向了同一个对象

    if(person == person2){

        NSLog(@"两个引用指向了同一个对象");

    }else{

        NSLog(@"两个引用指向了不同的对象");

    }

}

 

   两个引用指向的对象是否相等有两层含义:

  1) 两个引用是否指向了同一个对象

  2) 两个引用指向的对象内容(属性)是否相等。

   如果需要比较两个引用是否指向了同一个对象,只要使用"=="号就可以判断了。

   但如果需要比较两个引用指向的对象的内容(属性)是否相等,就得调用isEqual:方法来比较了。

  isEqual 方法的重构与调用

  - (BOOL)isEqual:(id)object

{

    //判断是否是自己

    if (self == object) return YES;

    //判空

    if (!object) return NO;

    //是否是同类

    if(![object isKindOfClass:[TRPerson class]]) return NO;

    //如果是同类,做类型转换,再进行比较

    TRPerson *person = object;

    return  [self.ID isEqual:person.ID] &&

            [self.name isEqual:person.name] &&

            self.age == person.age;

}

 

 

 

8.总结

+ alloc   分配内存空间

- init   初始化这片内存空间

+ load    类加载时自动调用, 

程序运行时,所有类加载

 

+ initialize  第一次使用这个类时自动调用

第一次创建对象

第一次调用类方法

 

- copy 返回一个复制的新对象

会调用对象的copyWithZone:方法。需要对象的类型遵守NSCopying协议

返回的可能是不可变对象

- mutableCopy 返回一个复制的新对象

会调用对象的mutableCopyWithZone:方法。需要对象的类型遵守NSMutableCopying协议

返回的是可变对象

 

 

+ class

返回这个类的类对象

+ superclass

返回父类的类对象

+ isSubclassOfClass

判断一个类型是否是另一个类型的子类

+ instancesRespondToSelector:

判断这个类型的对象是否会响应指定的方法

- performSelector:withObject:

另一种调用对象方法的方式

2.4 方法选择器Selector

是一种特殊的对象,代表一个方法。

这种对象的类型是SEL,如何创建这种对象:

SEL sel = @selector(方法名);//不加*

比如:

@selector(initWithName:age:gender:salary:)

@selector(setName:)

//方法选择器Selector

void test3()

{   //方法选择器对象,代表show方法

    SEL sel = @selector(show);

    BOOL res = [TRExample instancesRespondToSelector:sel];

    if(res)

    {

        NSLog(@"TRExample类中有实例方法show");

    }

    else

    {

        NSLog(@"TRExample类中没有实例方法show");

    }

}

 

 

9. - initWithCString           将C风格的字符串转换成OC风格的字符串对象

   

    char str[] = "Hai,Hello";

    NSString *str3 = [[NSString alloc]initWithCString:str encoding:NSUTF8StringEncoding];

 

10.cStringUsingEncoding        将OC风格的字符串对象转换成C风格的字符串

 

 

 

    const char *cstr = [str3 cStringUsingEncoding:NSUTF8StringEncoding];

    NSLog(@"cstr=%s", cstr);

    NSString *str4 = [[NSString alloc]initWithFormat:@"%02d:%02d:%02d", 8, 5, 9];

    NSLog(@"%@", str4);

    NSString *str5 = [NSString stringWithFormat:@"%02d:%02d:%02d", 8, 5, 9];

    NSLog(@"%@", str5);

 

 

11.stringWithContentsOfFile    从文件中读取内容到字符串对象

 

 

 NSString *str6 = [NSString stringWithContentsOfFile:@"/Users/Daniel/Desktop/a.txt" encoding:NSUTF8StringEncoding error:nil];

NSLog(@"str6:%@", str6);

 

12.writeToFile                 将字符串中的内容写到一个文件中

 

[str6 writeToFile:@"/Users/Daniel/Desktop/b.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];

}

 

13.stringByAppendingString   合并,拼接字符串

 

    NSString *str5 = @"ABC";

    NSString *str6 = @"DEF";

    NSString *str7 = [str5 stringByAppendingString:str6];

    NSLog(@"str7:%@", str7);

    str5 = [str5 stringByAppendingFormat:@"%02d:%02d:%02d",2,3,4];

    NSLog(@"str5=%@", str5);

    

}

 

14.characterAtIndex            获取指定位置的字符

 

    NSString *str4 = @"ABCDEFG";

    char ch = [str4 characterAtIndex:0];

    NSLog(@"%c", ch);

 

15.lengthOfBytesUsingEncoding  求字符串的长度

 

    NSString *str2 = @"我们都是,好孩子";

    NSLog(@"length:%ld", str2.length);

    NSLog(@"lengthOfBytes:%ld", [str2 lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);

 

16.componentsSeparatedByString  字符串分解方法

 

    NSString *info = @"Daniel:30:1:123456.78";

    NSArray *array = [info componentsSeparatedByString:@":"];

    NSLog(@"array[0]=%@", array[0]);

    NSLog(@"array[1]=%@", array[1]);

    NSLog(@"array[2]=%@", array[2]);

    NSString *str = @"ABCDEFGHIJKLMN";

    //包括起始位置

    NSString *str2 = [str substringFromIndex:8];

    NSLog(@"str2=%@", str2);

    //不包括结束位置

    NSString *str3 = [str substringToIndex:8];

    NSLog(@"str3=%@", str3);

    NSRange r = NSMakeRange(2, 4);

    NSString *str4 = [str substringWithRange:r];

    NSLog(@"str4=%@", str4);

17.rangeOfString  查找子串

 

     默认是大小写敏感

    NSString *str = @"Hello World.";

    NSRange r = [str rangeOfString:@"LLO"];

    if (r.location == NSNotFound) {

        NSLog(@"没有找着指定的子串");

    }else{

        NSLog(@"找着了,在%ld位置", r.location);

    }

    //忽略大小写查找子串

    r = [str rangeOfString:@"LLO" options:NSCaseInsensitiveSearch];

    if (r.length == 0){

        NSLog(@"没找到指定的字符子串");

    }else{

        NSLog(@"找着了,在%ld位置", r.location);

    }

 

 

18.stringByReplacingOccurrencesOfString  替换子串

 

 

         NSString *str = @"TRHelloWorld.mm";

    str = [str stringByReplacingOccurrencesOfString:@".mm" withString:@".java"];

    NSLog(@"str:%@", str);

    str = [str stringByReplacingCharactersInRange:NSMakeRange(2, 3) withString:@"HELLO"];

    NSLog(@"str:%@", str);

 

 

19.NSComparisonResult  比较大小

 

    NSString *str1 = @"aab";

    NSString *str2 = @"abc";

    NSComparisonResult result = [str1 compare:str2];

    if (result == NSOrderedAscending) {

        NSLog(@"str1 < str2");

    }else if(result == NSOrderedDescending){

        NSLog(@"str1 > str2");

    }else {

        NSLog(@"str1 == str2");

    }

    

    str1 = @"abc";

    str2 = @"ABC";

    if([str1 compare:str2 options:NSCaseInsensitiveSearch] == NSOrderedSame){

        NSLog(@"忽略大小写,两个字符串内容相同");

    }

    

    str1 = @"A10.txt";

    str2 = @"A8.txt";

    result = [str1 compare:str2 options:NSNumericSearch];//A10.txt > A8.txt

    NSLog(@"result:%ld", result);

 

20.isEqualToString  比较内容是否相等

  

 

   NSString *str1 = @"ABC";

    NSString *str2 = @"ABC";

    if(str1 == str2){

        NSLog(@"str1和str2==");

    }

    NSString *str3 = [[NSString alloc]initWithFormat:@"%@", @"ABC"];

    if(str1 == str3){

        NSLog(@"str1和str3也==");

    }

    //NSString类中的isEqual:方法比较的是内容,但是,在实际开发中,对于字符串类,基本不会使用此方法去比较内容是否相等,一般用isEqualToString:

    if([str1 isEqual:str3]){

        NSLog(@"str1和str3内容相等");

    }

    //专门给字符串类定制的比较方法

    if([str1 isEqualToString:str3]){

        NSLog(@"str1和str3的内容肯定是相同的");

    }

    

    //判断是否是指定字符串开始或结束

    NSString *filename = @"HelloWorld.mm";

    if([filename hasPrefix:@"Hello"]){

        NSLog(@"文件名以Hello开始");

    }

    if([filename hasSuffix:@".mm"]) {

        NSLog(@"这个文件是Objective C++源文件");

    }

 

 

20.改变大小写

 

  void test9()

  {

      NSString *str = @"Hello World.";

      str = [str lowercaseString];

     NSLog(@"str:%@", str);

     str = [str capitalizedString];

     NSLog(@"str:%@", str);

 }

 

21.将字符串转换成其他基本类型

void test10()

{

    NSString *str1 = @"123";

    int i1 = [str1 intValue];

    NSLog(@"i1=%d", i1);

    NSInteger i2 = [str1 integerValue];

    NSLog(@"i2=%ld", i2);

    NSString *str2 = @"3.1415926";

    float f = [str2 floatValue];

    NSLog(@"f=%f", f);

}

 

 

22.可变的字符串

 

    void test1()

  {

      NSMutableString *str = [NSMutableString stringWithCapacity:1];

 

      [str appendString:@"ABCDEFG"];

      NSLog(@"str:%@", str);

  }

 

23.stringFromDate   进行格式化(将日期转成字符串)

 

    void test2()

  {

    //1.要处理的日期对象

    NSDate *date = [NSDate date];

    //2.准备格式对象

    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];

    //3. 设置格式串属性

    formatter.dateFormat = @"yyyy-MM-dd hh:mm:ss";

    //4. 进行格式化(将日期转成字符串)

    NSString *formatString = [formatter stringFromDate:date];

    NSLog(@"%@", formatString);

    

    //将字符串转成日期

    NSString *dateString = @"2016-01-01 02:03:04";

    NSDate *date2 = [formatter dateFromString:dateString];

    NSLog(@"%@", date2);

 }

 

24.//

//  main.m

//  Demo2_NSArray

//

//  Created by DanielGuo on 15/8/27.

//  Copyright (c) 2015年 Tarena. All rights reserved.

//

 

#import <Foundation/Foundation.h>

 

//创建数组NSArray对象

void test1()

{

    //1. 字面值方式

    NSArray *arr1 = @[@"aaa", @"bbb", @"ccc"];

    //2. 工厂方法创建,最后一人元素必须是nil

    NSArray *arr2 = [NSArray arrayWithObjects:@"aaa", @"bbb", @"ccc", @"ddd", nil];

    NSString *strs[4] = {@"aaa", @"bbb", @"ccc", @"ddd"};

    NSArray *arr3 = [NSArray arrayWithObjects:strs count:4];

    NSLog(@"%@,%@,%@", arr1, arr2, arr3);

}

 

//遍历数组

void test2()

{

    //数组中只能放对象(对象的引用),不能放非对象类型(C语言中的基本类型,结构体等),数组中的每个元素是id类型的引用

    NSArray *arr = @[@"aaa", @"bbb", @"ccc", @"ddd"];

    NSLog(@"0000%@", arr);

    //1. 使用数组下标的方式进行遍历

    for(int i=0; i<arr.count; i++){

        NSString *str = arr[i];

        NSLog(@"%@", str);

        if(i == 2)break;

    }

    //2. 使用forin loop循环的方式进行遍历

    for(NSString *str in arr){

        NSLog(@"%@", str);

        //if (不需要遍历了)break;

    }

    //3. 使用Block进行遍历

    [arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

        NSLog(@"下标为%lu的元素是%@", idx, obj);

        if(idx == 2)*stop = YES;

    }];

    //4. 使用迭代器来遍历

    NSEnumerator *enumerator = [arr objectEnumerator];//获取迭代器

    NSString *obj = nil;

    while(obj = [enumerator nextObject]){ //通过迭代器拿数组中的一个对象

        NSLog(@"%@", obj);//对获得的对象进行处理

    }

}

 

//数组的拷贝

void test3()

{

    NSArray *arr1 = @[@"aaa", @"bbb", @"ccc"];

    NSArray *arr2 = arr1;

    //arr1[0] = @"AAA";//不可变,改不了

    //浅拷贝

    NSArray *arr3 = [[NSArray alloc]initWithArray:arr1 copyItems:NO];

    //深拷贝

    NSArray *arr4 = [[NSArray alloc]initWithArray:arr1 copyItems:YES];

    

}

//测试浅拷贝和深拷贝的区别

#import "TRPerson.h"

void test4()

{

    TRPerson *p1 = [[TRPerson alloc]initWithName:@"张三" andAge:30];

    TRPerson *p2 = [[TRPerson alloc]initWithName:@"李四" andAge:23];

    TRPerson *p3 = [[TRPerson alloc]initWithName:@"王小二" andAge:19];

    NSArray *persons = @[p1, p2, p3];

    //浅拷贝

    NSArray *persons2 = [[NSArray alloc]initWithArray:persons copyItems:NO];

    if(persons[0] == persons2[0]){

        NSLog(@"这是同一个对象");

    }

    [persons[0] setAge:35];//persons[0].age = 35;

    NSLog(@"%ld", [persons2[0] age]);

    

    //深拷贝

    NSArray *persons3 = [[NSArray alloc]initWithArray:persons copyItems:YES];

    for (TRPerson *p in persons) {

        NSLog(@"%p", p);

    }

    NSLog(@"===============");

    for (TRPerson *p in persons2) {

        NSLog(@"%p", p);

    }

    NSLog(@"===============");

    for (TRPerson *p in persons3) {

        NSLog(@"%p", p);

    }

}

 

//常用方法

void test5()

{

    NSArray *arr = @[@"aaa", @"bbb", @"ccc", @"ddd"];

    NSString *str = [[NSString alloc]initWithFormat:@"%@",@"bbb"];

    NSLog(@"arr[1]:%p,str:%p", arr[1], str);

    NSLog(@"%@", str);

    //判断数组中是否包含指定的对象,通过isEqual方法来判断的,而不是地址

    if([arr containsObject:str]){

        NSLog(@"数组中有这个对象");

    }

    

    TRPerson *p1 = [[TRPerson alloc]initWithName:@"张三" andAge:30];

    TRPerson *p2 = [[TRPerson alloc]initWithName:@"李四" andAge:23];

    TRPerson *p3 = [[TRPerson alloc]initWithName:@"王小二" andAge:19];

    NSArray *persons = @[p1, p2, p3];

    TRPerson *p4 = [[TRPerson alloc]initWithName:@"王小二" andAge:19];

    //当调用[p3 isEqual:p4]时结果为YES,说明数组中有王小二这个人

    if ([persons containsObject:p4]) {

        NSLog(@"数组中有王小二");

    }

    NSLog(@"==============");

    //从数组中查找对象,返回其下标,比较的是内容(isEqual:)

    NSInteger index = [persons indexOfObject:p4];

    if (index == NSNotFound) {

        NSLog(@"没有王小二");

    }else{

        NSLog(@"王小二在下标%ld的位置", index);

    }

    NSLog(@"==============");

    //下面方法比较的是地址(没有使用isEqual:方法)

    index = [persons indexOfObjectIdenticalTo:p3];

    if (index == NSNotFound) {

        NSLog(@"数组中没有这个对象");

    }else{

        NSLog(@"对象的下标是:%ld", index);

    }

    

    //向数组中的每一个对象发消息

    [persons makeObjectsPerformSelector:@selector(show)];

    //相当于以下代码

    /*

    for (TRPerson *p in persons) {

        [p show];

    }

     */

}

 

//其他方法

void test6()

{

    NSArray *arr = @[@"aaa", @"bbb", @"ccc", @"ddd"];

    arr = [arr arrayByAddingObject:@"eee"];

    NSLog(@"%@", arr);

}

 

 

 

//数组排序

NSInteger sortRule(id obj1, id obj2, void *p)

{

    //NSLog(@"sortRule");

    NSString *str1 = obj1;

    NSString *str2 = obj2;

    return [str1 compare:str2];

}

void test7()

{

    NSArray *arr = @[@"aaa",  @"ccc", @"bbb", @"ccc"];

    NSArray *sortedArr = [arr sortedArrayUsingFunction:sortRule context:nil];

    NSLog(@"%@", sortedArr);

    

    arr = @[@"aaa",  @"ccc", @"bbb", @"ccc"];

    //调用字符串类中的compare:方法进行比较大小运算

    sortedArr = [arr sortedArrayUsingSelector:@selector(compare:)];

    NSLog(@"%@", sortedArr);

}

 

 

 

 

int main(int argc, const char * argv[]) {

    @autoreleasepool {

        test5();

    }

    return 0;

}

 

 

 

 

 

 

NSString *str3 = [[NSString alloc]initWithCString:str encoding:NSUTF8StringEncoding];

将C风格的字符串转换成OC风格的字符串对象

 

 

 

//将OC风格的字符串对象转换成C风格的字符串

const char *cstr = [str3 cStringUsingEncoding : NSUTF8StringEncoding];

 

将字符串按要求格式初始化

NSString *str4 =[[NSString alloc]initWithFormat:@"%02d:%02d:%02d", 8, 5, 9];

 

 

将字符串按要求格式输出

NSString *str5 = [NSString stringWithFormat:@"%02d:%02d:%02d", 8, 5, 9];

 

 

 

从文件中读取内容到字符串对象

NSString *str6 = [NSString stringWithContentsOfFile:

@"/Users/Daniel/Desktop/a.txt" encoding:NSUTF8StringEncoding error:nil];

 

 

 

将字符串中的内容写到一个文件中

[str6 writeToFile:@"/Users/Daniel/Desktop/b.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];

 

 

在Unicode编码中,一个汉字是一个字符,有几个汉字,长度就是几

NSString *str2 = @"我们都是,好孩子";

NSLog(@"length:%ld", str2.length);

 

 

获取指定位置的字符

 NSString *str4 = @"ABCDEFG";

 char ch = [str4 characterAtIndex:0];

 

 

合并,拼接字符串

NSString *str5 = @"ABC";

NSString *str6 = @"DEF";

NSString *str7 = [str5 stringByAppendingString:str6];

 

 

 

字符串分解方法

NSString *info = @"Daniel:30:1:123456.78";

NSArray *array=[info componentsSeparatedByString:@“:”];

 

 

 

//测试字符串对象

void test1()

{

    //改变引用变量的值,没有改变对象的内容

    NSString *str = @"Hello";

    str = @"World";

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

    //字符串池的存在

    NSString *str1 = @"ABCDEF";

    NSString *str2 = @"ABCDEF";

    NSLog(@"str1=%p,str2=%p", str1, str2);

    if(str1 == str2){

        NSLog(@"str1==str2");

    }

    str2 = @"DEF";

}

//创建和初始化字符串对象

void test2()

{

    NSString *str1 = @"Hello";

    NSString *str2 = [[NSString alloc]initWithString:str1];//@"World";

    //将C风格的字符串转换成OC风格的字符串对象

    char str[] = "Hai,Hello";

    NSString *str3 = [[NSString alloc]initWithCString:str encoding:NSUTF8StringEncoding];

    //将OC风格的字符串对象转换成C风格的字符串

    const char *cstr = [str3 cStringUsingEncoding:NSUTF8StringEncoding];

    NSLog(@"cstr=%s", cstr);

    NSString *str4 = [[NSString alloc]initWithFormat:@"%02d:%02d:%02d", 8, 5, 9];

    NSLog(@"%@", str4);

    NSString *str5 = [NSString stringWithFormat:@"%02d:%02d:%02d", 8, 5, 9];

     NSLog(@"%@", str5);

    

    //从文件中读取内容到字符串对象

    NSString *str6 = [NSString stringWithContentsOfFile:@"/Users/Daniel/Desktop/a.txt" encoding:NSUTF8StringEncoding error:nil];

    NSLog(@"str6:%@", str6);

    //将字符串中的内容写到一个文件中

    [str6 writeToFile:@"/Users/Daniel/Desktop/b.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];

}

 

//字符串的普通方法

void test3()

{

    const char *str1 = "我们";//E68891

    //NSLog(@"%X%X%X", *str1, *(str1+1), *(str1+2));

    NSLog(@"strlen(str1)=%ld", strlen(str1));

    //在Unicode编码中,一个汉字是一个字符,有几个汉字,长度就是几

    NSString *str2 = @"我们都是,好孩子";

    NSLog(@"length:%ld", str2.length);

    NSLog(@"lengthOfBytes:%ld", [str2 lengthOfBytesUsingEncoding:NSUTF8StringEncoding]);

    

    NSString *str3 = @"Hello World!";

    NSLog(@"length:%ld", str3.length);

    

    //获取指定位置的字符

    NSString *str4 = @"ABCDEFG";

    char ch = [str4 characterAtIndex:0];

    NSLog(@"%c", ch);

    

    //合并,拼接字符串

    NSString *str5 = @"ABC";

    NSString *str6 = @"DEF";

    NSString *str7 = [str5 stringByAppendingString:str6];

    NSLog(@"str7:%@", str7);

    str5 = [str5 stringByAppendingFormat:@"%02d:%02d:%02d",2,3,4];

    NSLog(@"str5=%@", str5);

    

}

 

//字符串分解方法

void test4()

{

    NSString *info = @"Daniel:30:1:123456.78";

    NSArray *array = [info componentsSeparatedByString:@":"];

    NSLog(@"array[0]=%@", array[0]);

    NSLog(@"array[1]=%@", array[1]);

    NSLog(@"array[2]=%@", array[2]);

    NSString *str = @"ABCDEFGHIJKLMN";

    //包括起始位置

    NSString *str2 = [str substringFromIndex:8];

    NSLog(@"str2=%@", str2);

    //不包括结束位置

    NSString *str3 = [str substringToIndex:8];

    NSLog(@"str3=%@", str3);

    NSRange r = NSMakeRange(2, 4);

    NSString *str4 = [str substringWithRange:r];

    NSLog(@"str4=%@", str4);

}

 

//查找子串

void test5()

{

    //默认是大小写敏感

    NSString *str = @"Hello World.";

    NSRange r = [str rangeOfString:@"LLO"];

    if (r.location == NSNotFound) {

        NSLog(@"没有找着指定的子串");

    }else{

        NSLog(@"找着了,在%ld位置", r.location);

    }

    //忽略大小写查找子串

    r = [str rangeOfString:@"LLO" options:NSCaseInsensitiveSearch];

    if (r.length == 0){

        NSLog(@"没找到指定的字符子串");

    }else{

        NSLog(@"找着了,在%ld位置", r.location);

    }

}

 

//替换子串

void test6()

{

    NSString *str = @"TRHelloWorld.mm";

    str = [str stringByReplacingOccurrencesOfString:@".mm" withString:@".java"];

    NSLog(@"str:%@", str);

    str = [str stringByReplacingCharactersInRange:NSMakeRange(2, 3) withString:@"HELLO"];

    NSLog(@"str:%@", str);

}

 

//比较大小

void test7()

{

    NSString *str1 = @"aab";

    NSString *str2 = @"abc";

    NSComparisonResult result = [str1 compare:str2];

    if (result == NSOrderedAscending) {

        NSLog(@"str1 < str2");

    }else if(result == NSOrderedDescending){

        NSLog(@"str1 > str2");

    }else {

        NSLog(@"str1 == str2");

    }

    

    str1 = @"abc";

    str2 = @"ABC";

    if([str1 compare:str2 options:NSCaseInsensitiveSearch] == NSOrderedSame){

        NSLog(@"忽略大小写,两个字符串内容相同");

    }

    

    str1 = @"A10.txt";

    str2 = @"A8.txt";

    result = [str1 compare:str2 options:NSNumericSearch];//A10.txt > A8.txt

    NSLog(@"result:%ld", result);

}

 

//判等

void test8()

{

    NSString *str1 = @"ABC";

    NSString *str2 = @"ABC";

    if(str1 == str2){

        NSLog(@"str1和str2==");

    }

    NSString *str3 = [[NSString alloc]initWithFormat:@"%@", @"ABC"];

    if(str1 == str3){

        NSLog(@"str1和str3也==");

    }

    //NSString类中的isEqual:方法比较的是内容,但是,在实际开发中,对于字符串类,基本不会使用此方法去比较内容是否相等,一般用isEqualToString:

    if([str1 isEqual:str3]){

        NSLog(@"str1和str3内容相等");

    }

    //专门给字符串类定制的比较方法

    if([str1 isEqualToString:str3]){

        NSLog(@"str1和str3的内容肯定是相同的");

    }

    

    //判断是否是指定字符串开始或结束

    NSString *filename = @"HelloWorld.mm";

    if([filename hasPrefix:@"Hello"]){

        NSLog(@"文件名以Hello开始");

    }

    if([filename hasSuffix:@".mm"]) {

        NSLog(@"这个文件是Objective C++源文件");

    }

}

 

//改变大小写

void test9()

{

    NSString *str = @"Hello World.";

    str = [str lowercaseString];

    NSLog(@"str:%@", str);

    str = [str capitalizedString];

    NSLog(@"str:%@", str);

}

 

//将字符串转换成其他基本类型

void test10()

{

    NSString *str1 = @"123";

    int i1 = [str1 intValue];

    NSLog(@"i1=%d", i1);

    NSInteger i2 = [str1 integerValue];

    NSLog(@"i2=%ld", i2);

    NSString *str2 = @"3.1415926";

    float f = [str2 floatValue];

    NSLog(@"f=%f", f);

}

 

 

 

 

获取从第八个以后的字符串

NSString *str2 = [str substringFromIndex:8];

 

 

获取从第0个到第7个字符串

NSString *str3 = [str substringToIndex:8];

 

 

从第二个开始,获取四个字符串

 NSRange r = NSMakeRange(2, 4);

 NSString *str4 = [str substringWithRange:r];

 

 

查找子串,默认是大小写敏感

NSString *str = @"Hello World.";

NSRange r = [str rangeOfString:@“LLO"];

忽略大小写查找子串

r=[str rangeOfString:@“LLO" options:NSCaseInsensitiveSearch];

 

替换子串

str = [str stringByReplacingOccurrencesOfString:@".mm" withString:@“.java"];

替换指定范围子串

str = [str stringByReplacingCharactersInRange:NSMakeRange(2, 3) withString:@"HELLO"];

 

 

比较大小

NSComparisonResult result = [str1 compare:str2];

忽略大小写

[str1 compare:str2 options:NSCaseInsensitiveSearch]

 

 

 

判断是否是指定字符串开始或结束

开始

[filename hasPrefix:@“Hello”]

结束

[filename hasSuffix:@“.mm"]

 

 

改变大小写

 

str = [str lowercaseString];

 

str = [str capitalizedString];

 

 

 

NSDate

 

 

目标时间距离现在时间差24*60*6秒,可变

NSDate *date2 = [NSDate dateWithTimeIntervalSinceNow:24 * 60 * 60];

 

 

自1970年到现在的总秒数

NSTimeInterval sec = date.timeIntervalSince1970;

 

 

 

//格式化处理日期对象 

//1.要处理的日期对象

    NSDate *date = [NSDate date];

    //2.准备格式对象

    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];

    //3. 设置格式串属性

    formatter.dateFormat = @"yyyy-MM-dd hh:mm:ss";

    //4. 进行格式化(将日期转成字符串)

    NSString *formatString = [formatter stringFromDate:date];

 

 

 

//将字符串转成日期

    NSString *dateString = @"2016-01-01 02:03:04";

    NSDate *date2 = [formatter dateFromString:dateString];

 

 

 

 

 

 

 

NSArray

 

初始化

 

//1. 字面值方式

NSArray *arr1 = @[@"aaa", @"bbb", @"ccc"];

//2. 工厂方法创建,最后一人元素必须是nil

NSArray *arr2 = [NSArray arrayWithObjects:@"aaa", @"bbb", @"ccc", @"ddd", nil];

NSString *strs[4] = {@"aaa", @"bbb", @"ccc", @"ddd"}; NSArray *arr3 =[NSArray arrayWithObjects:strs count:4];

 

 

//遍历数组

 

//数组中只能放对象(对象的引用),不能放非对象类型(C语言中的基本类型,结构体等),数组中的每个元素是id类型的引用

 NSArray *arr = @[@"aaa", @"bbb", @"ccc", @"ddd"];

    NSLog(@"%@", arr);

    //1. 使用数组下标的方式进行遍历

    for(int i=0; i<arr.count; i++){

        NSString *str = arr[i];

        NSLog(@"%@", str);

        if(i == 2)break;

    }

    //2. 使用forin loop循环的方式进行遍历

    for(NSString *str in arr){

        NSLog(@"%@", str);

        //if (不需要遍历了)break;

    }

    //3. 使用Block进行遍历

[arr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) 

{

        NSLog(@"下标为%lu的元素是%@", idx, obj);

        if(idx == 2)*stop = YES;

  }];

 

 

4. 使用迭代器来遍历

   NSEnumerator *enumerator = [arr objectEnumerator];

//获取迭代器

    NSString *obj = nil;

    while(obj = [enumerator nextObject]){ //通过迭代器拿数组中的一个对象

        NSLog(@"%@", obj);//对获得的对象进行处理

    }

 

 

数组的拷贝

 

//浅拷贝

    NSArray *arr3 = [[NSArray alloc]initWithArray:arr1 copyItems:NO];

 //深拷贝

    NSArray *arr4 = [[NSArray alloc]initWithArray:arr1 copyItems:YES];

 

 

 

常用方法

 

NSArray *arr = @[@"aaa", @"bbb", @"ccc", @"ddd"];

   NSString *str = [[NSString alloc]initWithFormat:@“%@",@"bbb"];

 if([arr containsObject:str]){

        NSLog(@"数组中有这个对象");

    }

 

 

 //从数组中查找对象,返回其下标,比较的是内容(isEqual:)

    NSInteger index = [persons indexOfObject:p4];

    if (index == NSNotFound) {

        NSLog(@"没有王小二");

    }else{

        NSLog(@"王小二在下标%ld的位置", index);

    }

 

 

//下面方法比较的是地址(没有使用isEqual:方法)

    index = [persons indexOfObjectIdenticalTo:p4];

    if (index == NSNotFound) {

        NSLog(@"数组中没有这个对象");

    }else{

        NSLog(@"对象的下标是:%ld", index);

    }

    

//添加一个字符串

 NSArray *arr = @[@"aaa", @"bbb", @"ccc", @"ddd"];

    arr = [arr arrayByAddingObject:@"eee"];

    NSLog(@"%@", arr);

 

 

 

排序

 

 

 

//对自己定义的对象进行排序

NSInteger personSortRule(id obj1, id obj2, void*p)

{

    TRPerson *person1 = obj1;

    TRPerson *person2 = obj2;

    if(person1.age < person2.age) return -1;

    else if(person1.age > person2.age) return 1;

    return 0;

}

void test8()

{

    TRPerson *p1 = [[TRPerson alloc]initWithName:@"张三" andAge:30];

    TRPerson *p2 = [[TRPerson alloc]initWithName:@"李四" andAge:23];

    TRPerson *p3 = [[TRPerson alloc]initWithName:@"王小二" andAge:26];

    NSArray *persons = @[p1, p2, p3];

    //要求按年龄进行排序

    NSArray *sortedPersons = [persons sortedArrayUsingFunction:personSortRule context:nil];

 

 

 

 

//使用Block进行排序

    sortedPersons = [persons sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {

        TRPerson *p1 = obj1;

        TRPerson *p2 = obj2;

        if(p1.age < p2.age) return NSOrderedAscending;

        else if(p1.age > p2.age) return NSOrderedDescending;

        return NSOrderedSame;

    }];

 

 

NSArray *emps = @[e1, e2, e3, e4];

//key要的是参与排序的所有对象的某个属性的名字,如果参与排序的对象没有这个属性,排序会导致程序崩溃

    NSSortDescriptor *desc1 = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES];

    NSSortDescriptor *desc2 = [NSSortDescriptor sortDescriptorWithKey:@"salary" ascending:YES];

    NSArray *sortedEmps = [emps sortedArrayUsingDescriptors:@[desc1, desc2]];

 

 

 

 

NSSET

 

初始化

NSSet *set = [NSSet setWithObjects:@"aaa", @"bbb", @"ccc", @"aaa", nil];

 

NSSet ==> NSArray

    NSArray *objs = [set allObjects];

 

从set中随便拿一个对象

NSString *str = [set anyObject];

[objs firstObject];//数组中的第一个元素

[objs lastObject];//最后的一个元素

 

//判断set中有没有指定的对象

if([set containsObject:@“ccc"])

 

 

 

 

遍历set

 

forin

for (NSString *str in set)

{

    NSLog(@"%@", str);

}

 

 

//枚举器(迭代器)

    NSEnumerator *enumerator = [set objectEnumerator];

    NSString *str = nil;

    while(str = [enumerator nextObject]) {//拿其中一个对象

        NSLog(@"%@", str);

    }

 

 

 

 

 

 

//使用Block

[set enumerateObjectsUsingBlock:^(id obj, BOOL *stop) 

{

        NSString *str = obj;

        NSLog(@"%@", str);

        if([str isEqualToString:@"aaa"]){

            *stop = YES;//终止遍历

        }

    }];

 

 

 

 

排序

 

//将set变成数组再进行排序

    NSArray *sortedArray = [[set allObjects]sortedArrayUsingSelector:@selector(compare:)];

 

 

 

 

//Set间的计算

if([s2 isSubsetOfSet:s1])

{

     NSLog(@"s2是s1的子集");

 }

 

if([s1 intersectsSet:s3])

{

     NSLog(@"s1和s3相交");

 }

 

 

 

 

 

 

 

 

 

 

NSMutableSet

 

添加或修改set中的元素

NSMutableSet *mSet = [NSMutableSet new];

[mSet addObject:@"aaa"];

[mSet addObjectsFromArray:@[@"bbb", @"ccc", @“bbb"]];

[mSet removeObject:@“ccc"];

 

 

//集合运算

    NSMutableSet *s1 = [NSMutableSet setWithObjects:@"A", @"B", @"C", nil];

    NSMutableSet *s2 = [NSMutableSet setWithObjects:@"C", @"D", nil];

[s1 unionSet:s2]; s1=a,b,c,d

[s1 minusSet:s2]; s1=a,b

[s1 addObject:@"C"];

[s1 addObject:@"E"];//A B C E

[s1 intersectSet:s2] s1=c

[s1 setSet:s2]; s1=c,d

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

NSDictionary

 

 

初始化

NSDictionary *dict = [NSDictionary dictionaryWithObjects:@[@"Daniel", @"30"] forKeys:@[@"name", @“age"]];

 

NSDictionary *dict2 = [NSDictionary dictionaryWithObjectsAndKeys:@"Guodh", @"name", @"32", @"age", @"male", @"gender",nil];

 

NSDictionary *dict3 = @{ @"name" : @"Guodenghong", @"age":@35, @“gender":@"male"};

 

 

//使用下标访问key对应的value

NSString *name = dict[@"name"];

NSString *gender = [dict objectForKeyedSubscript:@"gender"];

NSNumber *age = [dict objectForKey:@“age"];

 

 

遍历字典

 

//遍历一

    NSArray *keys = [dict allKeys];

    for (NSString *key in keys) {

        id value = dict[key];

        NSLog(@"%@:%@", key, value);

    }

//遍历所所有value

    NSArray *values = [dict allValues];

    NSLog(@"%@", values);

//使用迭代器(枚举器)

    NSEnumerator *enumerator = [dict keyEnumerator];

    id key = nil;

    while(key = [enumerator nextObject]) {

        id value = dict[key];

        NSLog(@"%@,%@", key, value);

    }

//使用Block

    [dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {

        NSLog(@"%@:%@", key, obj);

    }];

 

 

 

排序

NSDictionary *dict = @{@"Daniel":@10, @"Guodh":@15, @"Mengriri": @5, @"Qinxi":@25};

    NSArray *keys = [dict keysSortedByValueUsingSelector:@selector(compare:)];

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

NSMutableDictionary

 

初始化

NSMutableDictionary *mDict = [NSMutableDictionary new];

    [mDict setObject:@"Daniel" forKey:@"name"];

    [mDict setObject:@"35" forKey:@"age"];

    mDict[@"gender"] = @“male";

添加

 mDict[@"age"] = @“36";

移除

[mDict removeObjectForKey:@"name"];

[mDict removeObjectsForKeys:@[@"age", @“gender"]];

 

 

重点:比较时一定要重写这两个方法

- (BOOL)isEqual:(id)object

{

    if (self == object) {return YES;}

    if (object == nil) {return NO;}

    if (![object isKindOfClass:[self class]]) {

        return NO;

    }

    TRHero *h = object;

    return [self.title isEqualToString:h.title] && [self.name isEqualToString:h.name];

}

 

//确保相同对象的hash值一定相等,不同对象的hash值尽可能不等。

- (NSUInteger)hash

{

    return self.power ^ self.title.hash ^ self.name.hash;

}

 

 

 

 

 

 

 

 

//将数组中所有的字典信息写入文件,要求字典中的key和value都是NSString或NSNumber等

void test1()

{

    //用字典保存一个账户信息

    NSDictionary *acc1 = @{

                        @"id" :@"1000001",

                        @"name":@"Daniel",

                        @"balance":@12340000.15,

                        @"loan":@8000000.0

    };

    NSDictionary *acc2 = @{

                           @"id" :@"1000002",

                           @"name":@"Shasha",

                           @"balance":@12340.0,

                           @"loan":@0.0

                           };

    NSDictionary *acc3 = @{

                           @"id" :@"1000003",

                           @"name":@"Shanshan",

                           @"balance":@100000.0,

                           @"loan":@5000.0

                           };

    NSDictionary *acc4 = @{

                           @"id" :@"1000004",

                           @"name":@"Lisa",

                           @"balance":@120000.0,

                           @"loan":@8000.0

                           };

    NSArray *accounts = @[acc1, acc2, acc3, acc4];

    [accounts writeToFile:@"/Users/Daniel/Desktop/account.plist" atomically:YES];

}

 

 

  将字典转换成NSdata类型步骤:

 

将字典转换成字符串类型

 */

        NSDictionary *dictContent = @{

                                      @"id" :@"1000001",

                                      @"name":@"Daniel",

                                      @"balance":@12340000.15,

                                      @"loan":@8000000.0

                                      };

        

        //先把字典转换成字符串类型

        NSString *dicStr = [dictContent description];

        //在把字符串类型转换成NSData

        NSData *dicData = [dicStr dataUsingEncoding:NSUTF8StringEncoding];

        

        BOOL isSuccess = [self.manager createFileAtPath:dictionaryPath contents:dicData attributes:nil];

//         BOOL isSuccess1 = [dictContent writeToFile:dictionaryPath atomically:YES];

        if (isSuccess)

        {

            NSLog(@"字典写入成功");

        }

    }

}

 

 

 

 

 

 

 

 

 

 

 

 

从文件中读取数据到数组中

#import "TRAccount.h"

void test2()

{

    //从文件中读取数据到数组,此时数组中的每个元素都是一个字典

    NSArray *accounts = [NSArray arrayWithContentsOfFile:@"/Users/Daniel/Desktop/account.plist"];

    //准备一个数组,用来保存所有的转换后的对象

    NSMutableArray *accountObjs = [NSMutableArray new];

    //将数组中的每一个字典转换成TRAccount类型的对象

    for (NSDictionary *dict in accounts) {

        //dict ==> TRAccount

        /*

        TRAccount *acc = [[TRAccount alloc]initWithId:dict[@"id"] andName:dict[@"name"]];

        acc.balance = [dict[@"balance"]doubleValue];

        acc.loan = [dict[@"loan"]doubleValue];

         */

        TRAccount *acc = [TRAccount accountWithDictionary:dict];

        [accountObjs addObject:acc];

    }

    //遍历对象数组

    for (TRAccount *acc in accountObjs) {

        NSLog(@"%@", acc);

    }

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

使用字典初始化当前对象

- (instancetype)initWithDictionary:(NSDictionary *)dict

{

    if (self = [self initWithId:dict[@"id"] andName:dict[@"name"]]) {

        _balance = [dict[@"balance"]doubleValue];

        _loan = [dict[@"loan"]doubleValue];

    }

    return self;

}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

label

 

设置大小

label.frame = CGRectMake(50, 50, 250, 200);

设置内容

label.text = @"这是一段测试文字";

设置背景色    

label.backgroundColor = [UIColor colorWithRed:120/255.0 green:79/255.0 blue:120/255.0 alpha:1];

设置字体大小    

label.font = [UIFont systemFontOfSize:20];

设置字体颜色

label.textColor = [UIColor whiteColor];

设置行数,默认1,0代表无限制

label.numberOfLines = 0;

设置“…”的位置,具体看enum

label.lineBreakMode = NSLineBreakByTruncatingMiddle;

设置文字位置(左对齐,右对齐,居中)

label.textAlignment = NSTextAlignmentCenter;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

button

 

 

button.frame = CGRectMake(20, 30, 200, 30);

 

[button setTitle:@“添加标签"     forState:UIControlStateNormal];

 

[button setBackgroundColor:[UIColor lightGrayColor]];

为按钮添加点击事件

[button addTarget:self action:@selector(addLabel:) forControlEvents:UIControlEventTouchUpInside];

3.添加到控制器的view中

[self.view addSubview:button];

 

posted @ 2015-12-14 19:29  乌托邦小余  阅读(301)  评论(0编辑  收藏  举报