类方法和对象方法
类方法
1.类方法的调用不依赖与对象,直接用类名调用 [类名 方法名]
2.类方法语法:+ (返回值类型) 方法名
3.类方法中不可以访问类对象的成员变量
4.通常在不访问类成员变量的时候,用类方法,一般是一些工具类
5.使用类方法可以提高性能和执行效率
对象方法
1.对象方法的调用依赖与对象 [对象指针 方法名]
2.对象方法语法:- (void) 方法名
3.对象方法中可以访问类对象的成员变量
NSString
NSString的共享性和恒定性
如果先后对两个NSString赋值相同的内容,那么其实他们的指针会被系统偷偷指向同一个内存地址,这就是NSString的共享性,因此,如果其中一个被修改,那另外一个也会被修改。为了避免出现这种情况,NSString又具有恒定性,一旦被赋值就无法修改。
图片的加载与内存
imageNamed:
1.采用这种方式加载的图片,就算指向它的指针被销毁,该图片也不会被从内存中清除 2.放到Assets.xcassets中的图片,由于只能使用这种加载方式,所以默认会存在缓存 3.对于那些经常使用的图片,应当采用这种加载方式。
imageWithContentOfFile:
1.指向它的指针被销毁,该图片就被从内存中清除。
expression is not assignable
“这个表达式无法被赋值”,通常出现在想直接给某个view的frame下的size里的width或者height赋值的时候出现,一般报错的语法是这样的
self.redView.frame.size.width = 200;
出现这个错误的原因是Object-c的点语法与C语言的点语法之间的区别和转换造成的,其中self.redView.frame是OC的语法,由于位于=左边,表示为[[self getRedView] setFrame],即为view的frame属性赋值。frame.size.width是C的语法,表示为[[frame getSize] getWidth],即获得frame的width属性值。如果连起来使用,那就是在set方法之后又调用get方法,变成setFrame().getSize().getWidth(),set方法是没有返回值的,自然也无法调用之后的get方法。解决办法是先将self.redView.frame放在=右边,这时它表示[[self getRedView] getFrame],我们将取得的frame赋值给一个变量,然后再对变量下的width进行修改,然后赋值给redView的frame。
CGRect temp = self.redView.frame;
temp.size.width = 200;
self.redView.frame = temp;