关闭

iOS中使用点语法

标签: ios开发ios
218人阅读 评论(0) 收藏 举报
分类:

 在实际的开发过程中,用点语法,绝对是加快开发过程的一个好帮手,废话不多说,开始上代码


1:在ios中使用点语法必须配置的关键字@property

 在ios开发过程中只要有这个关键字的,包括任何类库中的有该词修饰的都可以用点语法使用.看一下具体的语法

@property(nonatomic,retain) NSString *names;

这里写一下括号里的关键字,不做仔细介绍.

nonatomic 是表示非原子性,是原子性的时候则和线程有关...

retain,具体修饰后面的数据

总结如下

nsstring...... 用copy

nsarry.........用strong

uicontrol.....用weak

这一点很重要.



2:帮助我们生产的有哪些东东

 用了@property的时候,Xcode会帮助我们生成两端代码

2.1:第一段 @synthesize 属性名  = _属性名,并且生产的变量是@private的,其他类不能查看和访问

2.2:第二段 会对应的生成 getter和setter方法

2.3:注意:在用@property声明变量的时候 不要加下划线.


3:看一下Xcode生产的setter和getter方法

新建一个类

  声明变量

.h文件如下

/**
 *  年龄
 */
@property(nonatomic,assign) NSInteger ages;
/**
 *  姓名
 */
@property(nonatomic,retain) NSString *names;

/**
 *  毕业院校
 */
@property(nonatomic,copy) NSString *school;

.m文件如下

@synthesize ages = _ages;
@synthesize names = _names;
@synthesize school = _school;

/**
 *  用nsinter来看set和get方法
 *
 *  @param ages <#ages description#>
 */
- (void)setAges:(NSInteger)ages
{
    _ages = ages;

}

- (NSInteger)ages
{
    return _ages;
}

/**
 *  看retain的get和set方法
 *
 *  @param names <#names description#>
 */
- (void)setNames:(NSString *)names
{
    //判断原值和新值是否相等
    if (_names != names) {
        //如果不一样释放原值
        [_names release];
        //将新值付给原值
        _names = [names retain];
    }
}

- (NSString *)names
{
    return [[_names retain] autorelease];
}

/**
 *  看copy的get和set方法
 *
 *  @param school <#school description#>
 */
- (void)setSchool:(NSString *)school
{
    //判断原值和新值是否相等
    if (_school != school) {
        //如果不一样释放原值
        [_school release];
        //将新值付给原值
        _school = [school copy];
    }
}

- (NSString *)school
{
    return [[_school retain] autorelease];
}
@end

在上面的时候说过用@property修饰过的数据类型会自动生产getter和setter方法,上面就是具体的实现了具体过程的方法.


4:调用

Student *stu = [[Student alloc] init];
    
    stu.names = @"刘伯温";
    stu.schools = @"朱元璋大学";
    
    NSLog(@"%@---%@",stu.names,stu.schools);

在这里就可以用点语法来使用了

5: 用synthesize来重写

5.1在.h文件中声明了一个变量

     @property(nonatomic,copy)NSString *juner;

在main.m中调用的时候用点语法就可以出来

Student *stu = [[Student alloc] init];
    
  
    
    stu.juner = @"要重写的变量";
    
    
    NSLog(@"%@---%@",stu.names,stu.schools);

 5.2在.m文件中用synthesize重新制定juner的属性生产的变量名

 @synthesize sex = _testSex;

然后在写setJuner的时候就要改变了

- (void)setJuner:(NSString *)juner
{
    _testJuners = juner;
}

  这样就重新制定了生产的变量名.


6:用kvc的方法

给实列变量赋值

 [an setValue:@"230" forKey:@"price"];
    [an setValue:@"好听" forKey:@"voice"];
    //[an setValue:@"340" forKey:@"speed"];
    [an setValue:@(340) forKey:@"speed"];

在上述代码中的第三行speed的变量在.h文件中是没有声明的,这时候就会报错,那怎么解决了

- (void)setValue:(id)value forUndefinedKey:(NSString *)key
{
    NSLog(@"输入的路劲不对,请查看输入的路劲");
}

这就是在获取错误的时候,会抓取异常,不会让程序奔溃了








0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:62614次
    • 积分:1584
    • 等级:
    • 排名:千里之外
    • 原创:98篇
    • 转载:6篇
    • 译文:0篇
    • 评论:1条
    最新评论