首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

实践-小细节 II

1.如何让按钮文本左对齐

button.titleLabel.textAlignment = NSTextAlignmentLeft; 这行代码是没有效果的,这只是让标签中的文本左对齐,但 并没有改变标签在按钮中的对齐方式。

所以,我们首先要使用 button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft; 这行代码,把按钮的内容(控件) 的对齐方式修改为水平左对齐,但是这们会紧紧靠着左边,不好看, 所以我们还可以修改属性:

button.titleEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0); 这行代码可以让按钮的内容(控件)距离左边10个像素,这样就好看多了

代码语言:javascript
复制
  // button.titleLabel.textAlignment = NSTextAlignmentLeft; 这句无效  
  button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;  
  button.titleEdgeInsets = UIEdgeInsetsMake(0, 10, 0, 0);  

2.关于 UIView 的Opaque

opaque也是表示当前的UIView的不透明度,设置是否之后对于UIView的显示并没有什么影响,官方文档的意思简单点说就是opaque默认为YES,如果alpha小于1,那么应该设置opaque设置为NO,但是如果alpha为1,opaque设置为NO,产生的后果是不可预料的~

比如UIWebView的底部是带有黑线的 ,alpha 默认肯定是1,如果此时设置其背景为 cleanColor 并且 设置 Opaque = No,就会使那条黑线消失掉。

代码语言:javascript
复制
如果了解opaque,需要点屏幕绘制的知识,
屏幕上的每个像素点都是通过RGBA值(Red、Green、Blue三原色再配上Alpha透明度)表示的,
当纹理(UIView在绘图系统中对应的表示项)出现重叠时,
GPU会按照Result = Source + Destination * (1 - SourceAlpha)公式计算重叠部分的像素。
Result是结果RGB值,Source为处在重叠顶部纹理的RGB值,
Destination为处在重叠底部纹理的RGB值。
当SourceAlpha为1时,绘图系统认为下面的颜色全部被遮盖住了,
Result=Source,如果Source的Alpha不为0,上下层颜色就会进行合成,所以opaque默认设置YES,提升绘制性能,
如果开发中UIView是不透明的,opaque设置为YES, 如果opaque设置NO,那么Alpha应该小于1.

3.关于Xcode上的Other linker flags

代码语言:javascript
复制
-ObjC:    加了这个参数后,链接器就会把静态库中所有的Objective-C类和分类都加载到最后的可执行文件中
-all_load:会让链接器把所有找到的目标文件都加载到可执行文件中,但是千万不要随便使用这个参数!
            假如你使用了不止一个静态库文件,然后又使用了这个参数,那么你很有可能会遇到ld: duplicate symbol错误,
            因为不同的库文件里面可能会有相同的目标文件,所以建议在遇到-ObjC失效的情况下使用-force_load参数。
-force_load:所做的事情跟-all_load其实是一样的,但是-force_load需要指定要进行全部加载的库文件的路径,这样的话,
            你就只是完全加载了一个库文件,不影响其余库文件的按需加载

4.一个经常会错的地方

Paste_Image.png

尤其是在使用继承的时候,这个 隐蔽的调用 super 方法的地方会造成很多隐蔽的错误。使用继承时尤其要注意,调用 super 方法会先执行父类中对应的方法,而后再执行子类中的对应方法。

5.另一个经常会错的地方

代码语言:javascript
复制
我们在使用 可变数组的时候在赋值的时候喜欢这样  
#可变数组 A = 可变数组 B,我们当时只是想把B中的值全部赋值给A。
#这样的错误是  把A数组和B数组指针置为相同了,当  可变数组 A里面的值发生改变时,自然 
#可变数组 B 里面的值也发生相同的改变,因为两者指的的内存地址是同一处。
真确的赋值是这样的: [searchByName addObjectsFromArray:dataArray];

6.Base64编码的字符转图篇

图片上传服务器时还可以转成NSString再上传。

代码语言:javascript
复制
#图片转 Base64字符串  
-(NSString *)UIImageToBase64Str:(UIImage *) image  
{  
    NSData *data = UIImageJPEGRepresentation(image, 1.0f);  
 NSString *encodedImageStr 
 = [data base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];  
return encodedImageStr;  
} 

#Base64 字符串转图片
-(UIImage *)Base64StrToUIImage:(NSString *)_encodedImageStr
{
  NSData *_decodedImageData   = [[NSData alloc] initWithBase64Encoding:_encodedImageStr];
  UIImage *_decodedImage      = [UIImage imageWithData:_decodedImageData];
  return _decodedImage;
}

二进制流

Snip20161223_1.png

Base64编码

Snip20161223_2.png

7.文件写入

一个数组写入一个后缀为 .txt 的文件路径后:

Paste_Image.png

一个字典写入一个后缀为 .txt 的文件路径后:

Paste_Image.png

由上可知道,不管是数组和字典写入文件后都是 默认的plist文件保存的,以XML的数据格式组织的。 那么下面这样的文本文件该怎么生成呢?

Paste_Image.png

代码语言:javascript
复制
#把数组里的字符串以  换行的格式拼在一起,成为一个大的字符串,
NSString *finalStr = [allStr componentsJoinedByString:@"\n"];

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString *docPath = [paths objectAtIndex:0];
#把字符串写入文本文件中,即可
NSString *oo = [docPath stringByAppendingPathComponent:@"/area.txt"];
[finalStr writeToFile:oo atomically:YES encoding:NSUTF8StringEncoding error:nil];

.

8.同层级所有文件夹同时展开和关起快捷键

Paste_Image.png

我们按住 command键点击 controller左边的三角形,会发现 controller和model和view都展开了。再次点击会都收起。

9.打印指针地址和打印指针指向的对象的地址

. 打印指针的地址(不是指针指向对象的地址):NSLog(@"aStr指针内存地址:%x",&aStr); 打印指针所指向对象的地址使用这个 :NSLog(@"aStr指针所指向对象的地址:%p",aStr); PS:

The retainCount method does not account for any pending autorelease messages send to the receiver. 就是说retainCount 对于autorelease消息产生的的对象,并不可靠。

10.UITableViewController 的View问题

UITableViewController 的View就是一个TableView,常规无法修改他的 View的尺寸,只有在viewDidAppear的时候才可以重新修改UITableViewController的View尺寸也就是 TableView的尺寸。无他方法都无效。 . - (void)viewDidAppear:(BOOL)animated{ [self.tableView setFrame:CGRectMake(x, y, w, h)]; }

下一篇
举报
领券