- iOS编译过程的原理和应用
- 深入浅出iOS编译
- 聊聊Symbol
- iOS自动化测试的那些干货
- 越狱+Reveal 7分析三方AppUI框架教程
- MVVM和Controller瘦身实践
- 优雅的开发TableView
- 60fps的网易云音乐首页
- 深入理解App的启动过程
- Fishhook背后的黑魔法
- 实现一个优雅的iOS消息总线
- 聊聊AppDelegate解耦
- iOS系统Bug踩坑记录
- 聊聊应用内购买
如果发现博客有内容上的问题,欢迎issue。
一点心得 - iOS,Swift,React Native,Python...
有一点小疑惑,请教一下,我对这里使用双向链表有点小疑问,既然已经有字典可以用来保存双向链表中某个节点的位置,那为什么不直接用字典来保存这个订阅者呢?而只是保存订阅者的位置,然后再通过位置来操作双向链表,直接用字典不是更方便吗?时间复杂度也是一样的。
方便开源一个MVVM的OC框架么
# Symbols:
地址 大小 文件编号 方法名
# Address Size File Name
0x1000021B0 0x00000109 [ 2] -[ULWBigResponseButton pointInside:withEvent:]
0x1000022C0 0x00000080 [ 3] -[ULWCategoryController liveAPI]
0x100002340 0x00000080 [ 3] -[ULWCategoryController categories]
....
0x1000021B0 加上 size 0x00000109 末地址为 0x1000022B9 但是下一个地址的起始并不是 0x1000022BA 所以可以知道这个地方的地址并不连续,我猜想这个地方的不连续是不是跟文件编号有关,是不是文件编号相同的地址就是连续的,我理解这样是因为编号相同就是在同一个文件当中,那么这个当中的方法可以连续在一起编译,而不同文件中的方法即文件编号不同则需要放在不连续的内存中,相当于划分了一个块?再猜想的话会不会是针对每一个文件有固定的这样位置的大小,然后用不完的话就放在那里然后跳过使用下一个文件专属的块?
自定义 module 的 framework build 后, 并不会包含 module 中的代码,
而是通过 search path 去原路径寻找的, 如果把 framework 项目的路径修改,
或者把framework 丢个别人都会报 Missing required module
module 之间应该应该都是相互引用的, 并不会直接编译到二进制文件中,
查了好久还没有查到解决办法
关于深入理解ARC.md 这章的理解其中关于autoreleasepool有一点是不对的吧
__weak NSObject * obj;
@autoreleasepool {
NSObject * temp = [[NSObject alloc] init];
obj = temp;
}
这段代码是不会加入pool的,通过alloc创建的自己会管理不会放入pool。释放是因为超过作用域自然会释放局部变量。
可以这么写NSObject * temp = [NSObject creatObj];在MRC下是肯定加入pool,但是在ARC下这块通过tls存储进行了优化省去了发送autorelease和retain操作,并不一定加入pool。
objc 代码 编译生成 objc_msgSend 函数, 那应该是在 编译过程中产生的吧,具体是哪一步?; runtime 是不是就是个 动态库;objc_msgSend 就是runtime动态库里的方法, 最后会链接,装载成 执行文件吗?
望指教.
首次订阅购买拿到app的上传票据携带password去验证结果如下:
( 完整的验证结果数据 , 沙箱环境 )
{
"status": 0,
"environment": "Sandbox",
"receipt": {
"receipt_type": "ProductionSandbox",
"adam_id": 0,
"app_item_id": 0,
"bundle_id": "net.yqtrack.app",
"application_version": "1",
"download_id": 0,
"version_external_identifier": 0,
"receipt_creation_date": "2020-04-23 08:02:14 Etc/GMT",
"receipt_creation_date_ms": "1587628934000",
"receipt_creation_date_pst": "2020-04-23 01:02:14 America/Los_Angeles",
"request_date": "2020-04-23 09:02:08 Etc/GMT",
"request_date_ms": "1587632528932",
"request_date_pst": "2020-04-23 02:02:08 America/Los_Angeles",
"original_purchase_date": "2013-08-01 07:00:00 Etc/GMT",
"original_purchase_date_ms": "1375340400000",
"original_purchase_date_pst": "2013-08-01 00:00:00 America/Los_Angeles",
"original_application_version": "1.0",
"in_app": [{
"quantity": "1",
"product_id": "test_sub_auto_renew",
"transaction_id": "1000000641262877",
"original_transaction_id": "1000000641262877",
"purchase_date": "2020-03-20 02:16:35 Etc/GMT",
"purchase_date_ms": "1584670595000",
"purchase_date_pst": "2020-03-19 19:16:35 America/Los_Angeles",
"original_purchase_date": "2020-03-20 02:16:37 Etc/GMT",
"original_purchase_date_ms": "1584670597000",
"original_purchase_date_pst": "2020-03-19 19:16:37 America/Los_Angeles",
"expires_date": "2020-03-20 02:26:35 Etc/GMT",
"expires_date_ms": "1584671195000",
"expires_date_pst": "2020-03-19 19:26:35 America/Los_Angeles",
"web_order_line_item_id": "1000000051064583",
"is_trial_period": "false",
"is_in_intro_offer_period": "false"
},
{
"quantity": "1",
"product_id": "test_sub_auto_renew",
"transaction_id": "1000000649693801",
"original_transaction_id": "1000000641262877",
"purchase_date": "2020-04-09 03:16:10 Etc/GMT",
"purchase_date_ms": "1586402170000",
"purchase_date_pst": "2020-04-08 20:16:10 America/Los_Angeles",
"original_purchase_date": "2020-03-20 02:16:37 Etc/GMT",
"original_purchase_date_ms": "1584670597000",
"original_purchase_date_pst": "2020-03-19 19:16:37 America/Los_Angeles",
"expires_date": "2020-04-09 03:26:10 Etc/GMT",
"expires_date_ms": "1586402770000",
"expires_date_pst": "2020-04-08 20:26:10 America/Los_Angeles",
"web_order_line_item_id": "1000000051064584",
"is_trial_period": "false",
"is_in_intro_offer_period": "false"
},
{
"quantity": "1",
"product_id": "test_sub_auto_renew",
"transaction_id": "1000000649695835",
"original_transaction_id": "1000000641262877",
"purchase_date": "2020-04-09 03:26:10 Etc/GMT",
"purchase_date_ms": "1586402770000",
"purchase_date_pst": "2020-04-08 20:26:10 America/Los_Angeles",
"original_purchase_date": "2020-03-20 02:16:37 Etc/GMT",
"original_purchase_date_ms": "1584670597000",
"original_purchase_date_pst": "2020-03-19 19:16:37 America/Los_Angeles",
"expires_date": "2020-04-09 03:36:10 Etc/GMT",
"expires_date_ms": "1586403370000",
"expires_date_pst": "2020-04-08 20:36:10 America/Los_Angeles",
"web_order_line_item_id": "1000000051607039",
"is_trial_period": "false",
"is_in_intro_offer_period": "false"
},
{
"quantity": "1",
"product_id": "test_sub_auto_renew",
"transaction_id": "1000000649699311",
"original_transaction_id": "1000000641262877",
"purchase_date": "2020-04-09 03:36:10 Etc/GMT",
"purchase_date_ms": "1586403370000",
"purchase_date_pst": "2020-04-08 20:36:10 America/Los_Angeles",
"original_purchase_date": "2020-03-20 02:16:37 Etc/GMT",
"original_purchase_date_ms": "1584670597000",
"original_purchase_date_pst": "2020-03-19 19:16:37 America/Los_Angeles",
"expires_date": "2020-04-09 03:46:10 Etc/GMT",
"expires_date_ms": "1586403970000",
"expires_date_pst": "2020-04-08 20:46:10 America/Los_Angeles",
"web_order_line_item_id": "1000000051607179",
"is_trial_period": "false",
"is_in_intro_offer_period": "false"
},
{
"quantity": "1",
"product_id": "test_sub_auto_renew",
"transaction_id": "1000000649702926",
"original_transaction_id": "1000000641262877",
"purchase_date": "2020-04-09 03:46:10 Etc/GMT",
"purchase_date_ms": "1586403970000",
"purchase_date_pst": "2020-04-08 20:46:10 America/Los_Angeles",
"original_purchase_date": "2020-03-20 02:16:37 Etc/GMT",
"original_purchase_date_ms": "1584670597000",
"original_purchase_date_pst": "2020-03-19 19:16:37 America/Los_Angeles",
"expires_date": "2020-04-09 03:56:10 Etc/GMT",
"expires_date_ms": "1586404570000",
"expires_date_pst": "2020-04-08 20:56:10 America/Los_Angeles",
"web_order_line_item_id": "1000000051607329",
"is_trial_period": "false",
"is_in_intro_offer_period": "false"
},
{
"quantity": "1",
"product_id": "test_sub_auto_renew",
"transaction_id": "1000000649706093",
"original_transaction_id": "1000000641262877",
"purchase_date": "2020-04-09 03:56:10 Etc/GMT",
"purchase_date_ms": "1586404570000",
"purchase_date_pst": "2020-04-08 20:56:10 America/Los_Angeles",
"original_purchase_date": "2020-03-20 02:16:37 Etc/GMT",
"original_purchase_date_ms": "1584670597000",
"original_purchase_date_pst": "2020-03-19 19:16:37 America/Los_Angeles",
"expires_date": "2020-04-09 04:06:10 Etc/GMT",
"expires_date_ms": "1586405170000",
"expires_date_pst": "2020-04-08 21:06:10 America/Los_Angeles",
"web_order_line_item_id": "1000000051607501",
"is_trial_period": "false",
"is_in_intro_offer_period": "false"
},
{
"quantity": "1",
"product_id": "test_sub_auto_renew",
"transaction_id": "1000000649709450",
"original_transaction_id": "1000000641262877",
"purchase_date": "2020-04-09 04:06:10 Etc/GMT",
"purchase_date_ms": "1586405170000",
"purchase_date_pst": "2020-04-08 21:06:10 America/Los_Angeles",
"original_purchase_date": "2020-03-20 02:16:37 Etc/GMT",
"original_purchase_date_ms": "1584670597000",
"original_purchase_date_pst": "2020-03-19 19:16:37 America/Los_Angeles",
"expires_date": "2020-04-09 04:16:10 Etc/GMT",
"expires_date_ms": "1586405770000",
"expires_date_pst": "2020-04-08 21:16:10 America/Los_Angeles",
"web_order_line_item_id": "1000000051607642",
"is_trial_period": "false",
"is_in_intro_offer_period": "false"
},
{
"quantity": "1",
"product_id": "test_sub_auto_renew",
"transaction_id": "1000000651054139",
"original_transaction_id": "1000000641262877",
"purchase_date": "2020-04-13 06:36:41 Etc/GMT",
"purchase_date_ms": "1586759801000",
"purchase_date_pst": "2020-04-12 23:36:41 America/Los_Angeles",
"original_purchase_date": "2020-03-20 02:16:37 Etc/GMT",
"original_purchase_date_ms": "1584670597000",
"original_purchase_date_pst": "2020-03-19 19:16:37 America/Los_Angeles",
"expires_date": "2020-04-13 06:46:41 Etc/GMT",
"expires_date_ms": "1586760401000",
"expires_date_pst": "2020-04-12 23:46:41 America/Los_Angeles",
"web_order_line_item_id": "1000000051607812",
"is_trial_period": "false",
"is_in_intro_offer_period": "false"
},
{
"quantity": "1",
"product_id": "test_sub_auto_renew",
"transaction_id": "1000000651060572",
"original_transaction_id": "1000000641262877",
"purchase_date": "2020-04-13 06:47:09 Etc/GMT",
"purchase_date_ms": "1586760429000",
"purchase_date_pst": "2020-04-12 23:47:09 America/Los_Angeles",
"original_purchase_date": "2020-03-20 02:16:37 Etc/GMT",
"original_purchase_date_ms": "1584670597000",
"original_purchase_date_pst": "2020-03-19 19:16:37 America/Los_Angeles",
"expires_date": "2020-04-13 06:57:09 Etc/GMT",
"expires_date_ms": "1586761029000",
"expires_date_pst": "2020-04-12 23:57:09 America/Los_Angeles",
"web_order_line_item_id": "1000000051689255",
"is_trial_period": "false",
"is_in_intro_offer_period": "false"
},
{
"quantity": "1",
"product_id": "test_sub_auto_renew",
"transaction_id": "1000000651066307",
"original_transaction_id": "1000000641262877",
"purchase_date": "2020-04-13 06:57:12 Etc/GMT",
"purchase_date_ms": "1586761032000",
"purchase_date_pst": "2020-04-12 23:57:12 America/Los_Angeles",
"original_purchase_date": "2020-03-20 02:16:37 Etc/GMT",
"original_purchase_date_ms": "1584670597000",
"original_purchase_date_pst": "2020-03-19 19:16:37 America/Los_Angeles",
"expires_date": "2020-04-13 07:07:12 Etc/GMT",
"expires_date_ms": "1586761632000",
"expires_date_pst": "2020-04-13 00:07:12 America/Los_Angeles",
"web_order_line_item_id": "1000000051689510",
"is_trial_period": "false",
"is_in_intro_offer_period": "false"
},
{
"quantity": "1",
"product_id": "test_sub_auto_renew",
"transaction_id": "1000000651071166",
"original_transaction_id": "1000000641262877",
"purchase_date": "2020-04-13 07:07:12 Etc/GMT",
"purchase_date_ms": "1586761632000",
"purchase_date_pst": "2020-04-13 00:07:12 America/Los_Angeles",
"original_purchase_date": "2020-03-20 02:16:37 Etc/GMT",
"original_purchase_date_ms": "1584670597000",
"original_purchase_date_pst": "2020-03-19 19:16:37 America/Los_Angeles",
"expires_date": "2020-04-13 07:17:12 Etc/GMT",
"expires_date_ms": "1586762232000",
"expires_date_pst": "2020-04-13 00:17:12 America/Los_Angeles",
"web_order_line_item_id": "1000000051689756",
"is_trial_period": "false",
"is_in_intro_offer_period": "false"
},
{
"quantity": "1",
"product_id": "test_sub_auto_renew",
"transaction_id": "1000000651077696",
"original_transaction_id": "1000000641262877",
"purchase_date": "2020-04-13 07:21:37 Etc/GMT",
"purchase_date_ms": "1586762497000",
"purchase_date_pst": "2020-04-13 00:21:37 America/Los_Angeles",
"original_purchase_date": "2020-03-20 02:16:37 Etc/GMT",
"original_purchase_date_ms": "1584670597000",
"original_purchase_date_pst": "2020-03-19 19:16:37 America/Los_Angeles",
"expires_date": "2020-04-13 07:31:37 Etc/GMT",
"expires_date_ms": "1586763097000",
"expires_date_pst": "2020-04-13 00:31:37 America/Los_Angeles",
"web_order_line_item_id": "1000000051689999",
"is_trial_period": "false",
"is_in_intro_offer_period": "false"
},
{
"quantity": "1",
"product_id": "test_sub_auto_renew",
"transaction_id": "1000000651083556",
"original_transaction_id": "1000000641262877",
"purchase_date": "2020-04-13 07:32:45 Etc/GMT",
"purchase_date_ms": "1586763165000",
"purchase_date_pst": "2020-04-13 00:32:45 America/Los_Angeles",
"original_purchase_date": "2020-03-20 02:16:37 Etc/GMT",
"original_purchase_date_ms": "1584670597000",
"original_purchase_date_pst": "2020-03-19 19:16:37 America/Los_Angeles",
"expires_date": "2020-04-13 07:42:45 Etc/GMT",
"expires_date_ms": "1586763765000",
"expires_date_pst": "2020-04-13 00:42:45 America/Los_Angeles",
"web_order_line_item_id": "1000000051690368",
"is_trial_period": "false",
"is_in_intro_offer_period": "false"
},
{
"quantity": "1",
"product_id": "test_sub_auto_renew",
"transaction_id": "1000000655573401",
"original_transaction_id": "1000000641262877",
"purchase_date": "2020-04-23 08:02:13 Etc/GMT",
"purchase_date_ms": "1587628933000",
"purchase_date_pst": "2020-04-23 01:02:13 America/Los_Angeles",
"original_purchase_date": "2020-03-20 02:16:37 Etc/GMT",
"original_purchase_date_ms": "1584670597000",
"original_purchase_date_pst": "2020-03-19 19:16:37 America/Los_Angeles",
"expires_date": "2020-04-23 08:12:13 Etc/GMT",
"expires_date_ms": "1587629533000",
"expires_date_pst": "2020-04-23 01:12:13 America/Los_Angeles",
"web_order_line_item_id": "1000000051690672",
"is_trial_period": "false",
"is_in_intro_offer_period": "false"
}
]
},
"latest_receipt_info": [{
"quantity": "1",
"product_id": "test_sub_auto_renew",
"transaction_id": "1000000655600687",
"original_transaction_id": "1000000641262877",
"purchase_date": "2020-04-23 08:52:13 Etc/GMT",
"purchase_date_ms": "1587631933000",
"purchase_date_pst": "2020-04-23 01:52:13 America/Los_Angeles",
"original_purchase_date": "2020-03-20 02:16:37 Etc/GMT",
"original_purchase_date_ms": "1584670597000",
"original_purchase_date_pst": "2020-03-19 19:16:37 America/Los_Angeles",
"expires_date": "2020-04-23 09:02:13 Etc/GMT",
"expires_date_ms": "1587632533000",
"expires_date_pst": "2020-04-23 02:02:13 America/Los_Angeles",
"web_order_line_item_id": "1000000051965329",
"is_trial_period": "false",
"is_in_intro_offer_period": "false",
"subscription_group_identifier": "20425005"
}],
"latest_receipt": "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",
"pending_renewal_info": [{
"auto_renew_product_id": "test_sub_auto_renew",
"original_transaction_id": "1000000641262877",
"product_id": "test_sub_auto_renew",
"auto_renew_status": "0"
}]
}
Server续订操作 , 使用首次订阅购买的app上传的票据( 存储在db ) , 拿出来再去24h前定期检查是否续订 , 然后验证结果显示为 :
{
"auto_renew_status": 1,
"status": 0,
"auto_renew_product_id": "test_sub_auto_renew",
"receipt": {
"original_purchase_date_pst": "2020-03-19 19:16:37 America/Los_Angeles",
"quantity": "1",
"unique_vendor_identifier": "7ABC2762-B9CC-4B2E-8BDB-AA50185E26DC",
"bvrs": "1",
"expires_date_formatted": "2020-04-23 08:12:13 Etc/GMT",
"is_in_intro_offer_period": "false",
"purchase_date_ms": "1587628933000",
"expires_date_formatted_pst": "2020-04-23 01:12:13 America/Los_Angeles",
"is_trial_period": "false",
"item_id": "1429441183",
"unique_identifier": "00008020-0015118C1EDA002E",
"original_transaction_id": "1000000641262877",
"subscription_group_identifier": "20425005",
"transaction_id": "1000000655573401",
"web_order_line_item_id": "1000000051690672",
"version_external_identifier": "0",
"purchase_date": "2020-04-23 08:02:13 Etc/GMT",
"product_id": "test_sub_auto_renew",
"expires_date": "1587629533000",
"original_purchase_date": "2020-03-20 02:16:37 Etc/GMT",
"purchase_date_pst": "2020-04-23 01:02:13 America/Los_Angeles",
"bid": "net.yqtrack.app",
"original_purchase_date_ms": "1584670597000"
},
"latest_receipt_info": {
"original_purchase_date_pst": "2020-03-19 19:16:37 America/Los_Angeles",
"quantity": "1",
"unique_vendor_identifier": "F1976DFF-3B56-4980-AC16-F01BD8D87D9D",
"bvrs": "1",
"expires_date_formatted": "2020-04-23 09:02:13 Etc/GMT",
"is_in_intro_offer_period": "false",
"purchase_date_ms": "1587631933000",
"expires_date_formatted_pst": "2020-04-23 02:02:13 America/Los_Angeles",
"is_trial_period": "false",
"item_id": "1429441183",
"unique_identifier": "00008020-0015118C1EDA002E",
"original_transaction_id": "1000000641262877",
"subscription_group_identifier": "20425005",
"transaction_id": "1000000655600687",
"bid": "net.yqtrack.app",
"web_order_line_item_id": "1000000051965329",
"purchase_date": "2020-04-23 08:52:13 Etc/GMT",
"product_id": "test_sub_auto_renew",
"expires_date": "1587632533000",
"original_purchase_date": "2020-03-20 02:16:37 Etc/GMT",
"purchase_date_pst": "2020-04-23 01:52:13 America/Los_Angeles",
"original_purchase_date_ms": "1584670597000"
},
"latest_receipt": "ewoJInNpZ25hdHVyZSIgPSAiQTU1bGJJVXBSejR4bHV1dExsdkxaT3BodjNrZ0NBVFlRT0VmNnJKTjMvREQ1ek1CNXRoSGM0djdIRXZLVnZRenBVL2dRRUEydDBqYnZaVEFTSENoMzFvSVJjakU3RHBVQlpXV3RueFoxUGhoY09LRUd4Q0ZZVDlnQnZmRS90NVhDelRWZFJ0M0JmdVBtMzNxYW1rWlY1MkZmOFBpVFFVdnp6WHFpTGQ4ejVXengySDlvV3kzSHVoQzZBVVlBQk1MQ2NaN0hzZlE4NUduYmZEaEJEbk02THVpdXBLMytQSHY0UmJ3cGdCdXdQa3QrL0dJbXhGaGlFUGpmWlBtVHJWc2xJa1VjQ2p3eEJEMmJicHFjYmlvc29CdzgxNG9QUEh2SnVaQjE0dytqVnlrWlJ5dWExeHhVcnFxTjh5REl1d1ZVQ2FaQmJQOW1JT0dVZzhXbDR5SU40a0FBQVdBTUlJRmZEQ0NCR1NnQXdJQkFnSUlEdXRYaCtlZUNZMHdEUVlKS29aSWh2Y05BUUVGQlFBd2daWXhDekFKQmdOVkJBWVRBbFZUTVJNd0VRWURWUVFLREFwQmNIQnNaU0JKYm1NdU1Td3dLZ1lEVlFRTERDTkJjSEJzWlNCWGIzSnNaSGRwWkdVZ1JHVjJaV3h2Y0dWeUlGSmxiR0YwYVc5dWN6RkVNRUlHQTFVRUF3dzdRWEJ3YkdVZ1YyOXliR1IzYVdSbElFUmxkbVZzYjNCbGNpQlNaV3hoZEdsdmJuTWdRMlZ5ZEdsbWFXTmhkR2x2YmlCQmRYUm9iM0pwZEhrd0hoY05NVFV4TVRFek1ESXhOVEE1V2hjTk1qTXdNakEzTWpFME9EUTNXakNCaVRFM01EVUdBMVVFQXd3dVRXRmpJRUZ3Y0NCVGRHOXlaU0JoYm1RZ2FWUjFibVZ6SUZOMGIzSmxJRkpsWTJWcGNIUWdVMmxuYm1sdVp6RXNNQ29HQTFVRUN3d2pRWEJ3YkdVZ1YyOXliR1IzYVdSbElFUmxkbVZzYjNCbGNpQlNaV3hoZEdsdmJuTXhFekFSQmdOVkJBb01Da0Z3Y0d4bElFbHVZeTR4Q3pBSkJnTlZCQVlUQWxWVE1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBcGMrQi9TV2lnVnZXaCswajJqTWNqdUlqd0tYRUpzczl4cC9zU2cxVmh2K2tBdGVYeWpsVWJYMS9zbFFZbmNRc1VuR09aSHVDem9tNlNkWUk1YlNJY2M4L1cwWXV4c1FkdUFPcFdLSUVQaUY0MWR1MzBJNFNqWU5NV3lwb041UEM4cjBleE5LaERFcFlVcXNTNCszZEg1Z1ZrRFV0d3N3U3lvMUlnZmRZZUZScjZJd3hOaDlLQmd4SFZQTTNrTGl5a29sOVg2U0ZTdUhBbk9DNnBMdUNsMlAwSzVQQi9UNXZ5c0gxUEttUFVockFKUXAyRHQ3K21mNy93bXYxVzE2c2MxRkpDRmFKekVPUXpJNkJBdENnbDdaY3NhRnBhWWVRRUdnbUpqbTRIUkJ6c0FwZHhYUFEzM1k3MkMzWmlCN2o3QWZQNG83UTAvb21WWUh2NGdOSkl3SURBUUFCbzRJQjF6Q0NBZE13UHdZSUt3WUJCUVVIQVFFRU16QXhNQzhHQ0NzR0FRVUZCekFCaGlOb2RIUndPaTh2YjJOemNDNWhjSEJzWlM1amIyMHZiMk56Y0RBekxYZDNaSEl3TkRBZEJnTlZIUTRFRmdRVWthU2MvTVIydDUrZ2l2Uk45WTgyWGUwckJJVXdEQVlEVlIwVEFRSC9CQUl3QURBZkJnTlZIU01FR0RBV2dCU0lKeGNKcWJZWVlJdnM2N3IyUjFuRlVsU2p0ekNDQVI0R0ExVWRJQVNDQVJVd2dnRVJNSUlCRFFZS0tvWklodmRqWkFVR0FUQ0IvakNCd3dZSUt3WUJCUVVIQWdJd2diWU1nYk5TWld4cFlXNWpaU0J2YmlCMGFHbHpJR05sY25ScFptbGpZWFJsSUdKNUlHRnVlU0J3WVhKMGVTQmhjM04xYldWeklHRmpZMlZ3ZEdGdVkyVWdiMllnZEdobElIUm9aVzRnWVhCd2JHbGpZV0pzWlNCemRHRnVaR0Z5WkNCMFpYSnRjeUJoYm1RZ1kyOXVaR2wwYVc5dWN5QnZaaUIxYzJVc0lHTmxjblJwWm1sallYUmxJSEJ2YkdsamVTQmhibVFnWTJWeWRHbG1hV05oZEdsdmJpQndjbUZqZEdsalpTQnpkR0YwWlcxbGJuUnpMakEyQmdnckJnRUZCUWNDQVJZcWFIUjBjRG92TDNkM2R5NWhjSEJzWlM1amIyMHZZMlZ5ZEdsbWFXTmhkR1ZoZFhSb2IzSnBkSGt2TUE0R0ExVWREd0VCL3dRRUF3SUhnREFRQmdvcWhraUc5Mk5rQmdzQkJBSUZBREFOQmdrcWhraUc5dzBCQVFVRkFBT0NBUUVBRGFZYjB5NDk0MXNyQjI1Q2xtelQ2SXhETUlKZjRGelJqYjY5RDcwYS9DV1MyNHlGdzRCWjMrUGkxeTRGRkt3TjI3YTQvdncxTG56THJSZHJqbjhmNUhlNXNXZVZ0Qk5lcGhtR2R2aGFJSlhuWTR3UGMvem83Y1lmcnBuNFpVaGNvT0FvT3NBUU55MjVvQVE1SDNPNXlBWDk4dDUvR2lvcWJpc0IvS0FnWE5ucmZTZW1NL2oxbU9DK1JOdXhUR2Y4YmdwUHllSUdxTktYODZlT2ExR2lXb1IxWmRFV0JHTGp3Vi8xQ0tuUGFObVNBTW5CakxQNGpRQmt1bGhnd0h5dmozWEthYmxiS3RZZGFHNllRdlZNcHpjWm04dzdISG9aUS9PamJiOUlZQVlNTnBJcjdONFl0UkhhTFNQUWp2eWdhWndYRzU2QWV6bEhSVEJoTDhjVHFBPT0iOwoJInB1cmNoYXNlLWluZm8iID0gImV3b0pJbTl5YVdkcGJtRnNMWEIxY21Ob1lYTmxMV1JoZEdVdGNITjBJaUE5SUNJeU1ESXdMVEF6TFRFNUlERTVPakUyT2pNM0lFRnRaWEpwWTJFdlRHOXpYMEZ1WjJWc1pYTWlPd29KSW5GMVlXNTBhWFI1SWlBOUlDSXhJanNLQ1NKemRXSnpZM0pwY0hScGIyNHRaM0p2ZFhBdGFXUmxiblJwWm1sbGNpSWdQU0FpTWpBME1qVXdNRFVpT3dvSkluVnVhWEYxWlMxMlpXNWtiM0l0YVdSbGJuUnBabWxsY2lJZ1BTQWlSakU1TnpaRVJrWXRNMEkxTmkwME9UZ3dMVUZETVRZdFJqQXhRa1E0UkRnM1JEbEVJanNLQ1NKdmNtbG5hVzVoYkMxd2RYSmphR0Z6WlMxa1lYUmxMVzF6SWlBOUlDSXhOVGcwTmpjd05UazNNREF3SWpzS0NTSmxlSEJwY21WekxXUmhkR1V0Wm05eWJXRjBkR1ZrSWlBOUlDSXlNREl3TFRBMExUSXpJREE1T2pBeU9qRXpJRVYwWXk5SFRWUWlPd29KSW1sekxXbHVMV2x1ZEhKdkxXOW1abVZ5TFhCbGNtbHZaQ0lnUFNBaVptRnNjMlVpT3dvSkluQjFjbU5vWVhObExXUmhkR1V0YlhNaUlEMGdJakUxT0RjMk16RTVNek13TURBaU93b0pJbVY0Y0dseVpYTXRaR0YwWlMxbWIzSnRZWFIwWldRdGNITjBJaUE5SUNJeU1ESXdMVEEwTFRJeklEQXlPakF5T2pFeklFRnRaWEpwWTJFdlRHOXpYMEZ1WjJWc1pYTWlPd29KSW1sekxYUnlhV0ZzTFhCbGNtbHZaQ0lnUFNBaVptRnNjMlVpT3dvSkltbDBaVzB0YVdRaUlEMGdJakUwTWprME5ERXhPRE1pT3dvSkluVnVhWEYxWlMxcFpHVnVkR2xtYVdWeUlpQTlJQ0l3TURBd09EQXlNQzB3TURFMU1URTRRekZGUkVFd01ESkZJanNLQ1NKdmNtbG5hVzVoYkMxMGNtRnVjMkZqZEdsdmJpMXBaQ0lnUFNBaU1UQXdNREF3TURZME1USTJNamczTnlJN0Nna2laWGh3YVhKbGN5MWtZWFJsSWlBOUlDSXhOVGczTmpNeU5UTXpNREF3SWpzS0NTSjBjbUZ1YzJGamRHbHZiaTFwWkNJZ1BTQWlNVEF3TURBd01EWTFOVFl3TURZNE55STdDZ2tpWW5aeWN5SWdQU0FpTVNJN0Nna2lkMlZpTFc5eVpHVnlMV3hwYm1VdGFYUmxiUzFwWkNJZ1BTQWlNVEF3TURBd01EQTFNVGsyTlRNeU9TSTdDZ2tpWW1sa0lpQTlJQ0p1WlhRdWVYRjBjbUZqYXk1aGNIQWlPd29KSW5CeWIyUjFZM1F0YVdRaUlEMGdJblJsYzNSZmMzVmlYMkYxZEc5ZmNtVnVaWGNpT3dvSkluQjFjbU5vWVhObExXUmhkR1VpSUQwZ0lqSXdNakF0TURRdE1qTWdNRGc2TlRJNk1UTWdSWFJqTDBkTlZDSTdDZ2tpY0hWeVkyaGhjMlV0WkdGMFpTMXdjM1FpSUQwZ0lqSXdNakF0TURRdE1qTWdNREU2TlRJNk1UTWdRVzFsY21sallTOU1iM05mUVc1blpXeGxjeUk3Q2draWIzSnBaMmx1WVd3dGNIVnlZMmhoYzJVdFpHRjBaU0lnUFNBaU1qQXlNQzB3TXkweU1DQXdNam94Tmpvek55QkZkR012UjAxVUlqc0tmUT09IjsKCSJlbnZpcm9ubWVudCIgPSAiU2FuZGJveCI7CgkicG9kIiA9ICIxMDAiOwoJInNpZ25pbmctc3RhdHVzIiA9ICIwIjsKfQ=="
}
第二次字段响应不符合官方文档的说明啊???请问这是什么情况???
还有我看了您的记录 , 说是Server用最后一次票据去轮询验证 , 最后一次票据具体是指???
在framework库里混编的时候,oc调用swift,swift必须是public,这样swift就可以被外界访问了。有没有办法避免对外暴露。
关于strong和weak的理解:
NSObject * temp = [[NSObject alloc] init];
__strong NSObject * temp = [[NSObject alloc] init];
这样有什么区别呢?
arc中没有strong和weak能不能正常运行?
你好,在《深入浅出iOS编译》有个疑惑,这里LLVM LR,是书写错误吗?
https://blog.csdn.net/Hello_Hwc/article/details/85226147
背景:需要升级Watch OS5 Beta版本来开发一些新功能,手机:iPhone 7,手表:iWatch 3
坑:
解决办法:
小结:手机必须先删除iOS 12 Beta Profile才能连接到表;必须安装上iOS 12 Beta Profile才能更新Watch OS
LLVM本质上只是一个缩写
博主的文章写的很好,仔细阅读时发现一出语句问题:
《优雅的开发TableView》中:
“继承是一个实现代码复用的解决方案,通过在基类中实现-子类重写的方式进行服复用。”
结尾应该是多了一个“服”。
不算是一个问题,阅读时发现,顺手提一下~
未绑定App Store支付方式的用户,在购买内购商品时,首先会弹出一个设置支付方式的弹框,用户点击了继续,updatedTransactions会回调一个是失败的交易,也就是SKPaymentTransactionStateFailed,此时APP 调用了finishTransaction,结束了当前交易,而用户跳转到App Store绑定支付方式之后,接着付款成功了。此时APP还会调用updatedTransactions函数回调成功的交易吗?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.