Objective-C入门(二)

点语法

@interface PersonCell : UITableViewCell

@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *birthday;

@end

当我们在实现中采用点语法去设置属性时,实质上是调用setXXX来完成这一操作的。

cell.name = @"mmq";	//等同于[cell setName:@"mmq"];

我们可以利用这个特性做其他事情:

- (void)setName:(NSString *)name {
	_name = name;
    nameLabel.text = name;
}

重写setName方法,当name被改变的时候,进行界面的更新。

其他
_name是实例变量,外部是不能访问一个类的实例变量的,只能通过setter和getter。

类别(Category)

1.分类是用于给原有类添加方法的,因为分类的结构体指针中,没有属性列表,只有方法列表。所以< 原则上讲它只能添加方法, 不能添加属性(成员变量),实际上可以通过其它方式添加属性> ;
2.分类中的可以写@property, 但不会生成setter/getter方法, 也不会生成实现以及私有的成员变量(编译时会报警告);
3.可以在分类中访问原有类中.h中的属性;
4.如果分类中有和原有类同名的方法, 会优先调用分类中的方法, 就是说会忽略原有类的方法。所以同名方法调用的优先级为 分类 > 本类 > 父类。因此在开发中尽量不要覆盖原有类;
5.如果多个分类中都有和原有类中同名的方法, 那么调用该方法的时候执行谁由编译器决定;编译器会执行最后一个参与编译的分类中的方法。
作者:CoderDancer
链接:https://www.jianshu.com/p/9e827a1708c6

用法:

@interface ClassName(CategoryName)
@end

示例:

//NSStringAdditions.h
@interface NSString (NSStringAdditions)
+ (NSString *) getAuthorNameString;
@end

//NSStringAdditions.m
@implementation NSString (NSStringAdditions)
+ (NSString *) getAuthorNameString {
    return @"momingqi";
}
@end

//使用
#import "NSStringAdditions.h"
...
NSString *categoryTest = [NSString getAuthorNameString];
NSLog(@"类别测试:%@", categoryTest);

要注意的是,使用类别的方法时需要引入类别的头文件。

扩展(Extension)

  • 不能为任何类声明扩展,仅适用于原始实现源代码的类。
  • 扩展是添加仅特定于类的私有方法和私有变量。
  • 扩展内部声明的任何方法或变量即使对于继承的类也是不可访问的。

UIKit

UIWindow:

  • 视图需要显示在屏幕上,需要添加到UIWindow上;一个app中至少有一个UIWindow。

  • iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,
    最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了

UIApplication生命周期:
在这里插入图片描述
完成创建工作:didFinishLaunchingWithOptions
applicationDidBecomeActive
上滑:applicationWillResignActive
返回桌面:applicationDidEnterBackground
回到app:applicationWillEnterForeground
applicationDidBecomeActive
杀进程:applicationWillTerminate

ViewController生命周期:
在这里插入图片描述
切后台的时候ViewController是不会viewDidDisappear的!

UINavigationController

导航控制器,可以轻松完成多个控制器之间的切换,其结构包含导航条(y=20)、栈顶控制器的view、导航控制器的view。导航控制器需要设置一个根控制器,一般是UIViewControler。

导航控制器作为父控制器,子控制器中的栈顶控制器作为根控制器。默认是没有的,需要手动push一个控制器或者通过构造方法指定根控制器。

- (instancetype)initWithRootViewController:(UIViewController *)rootViewController; // Convenience method pushes the root view controller without animation.

UILabel

[label sizeToFit]; 使这个labelView的宽高适应文本大小:
在这里插入图片描述

小红点实现:

//设置小红点
        _unreadCountLabel.textColor = [UIColor whiteColor];
        _unreadCountLabel.backgroundColor = [UIColor redColor];
        _unreadCountLabel.textAlignment = NSTextAlignmentCenter;
        _unreadCountLabel.layer.masksToBounds = YES; //需要YES,否则没有圆角效果
        _unreadCountLabel.layer.cornerRadius = 10; //为宽度的一半

UILayer

UIView继承自UIResponder ,负责接收用户事件和显示内容。

UIView的内部拥有一个layer属性:
@property(nonatomic,readonly,retain) CALayer *layer;

当UIView需要显示在屏幕上时,会调用自身的drawRect方法,把内容绘制在layer上;绘制完毕后,系统把layer的内容拷贝到屏幕上,这就完成了内容的显示。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值